From 6f82df69efa372fb4bddf272fff577850a09f1dc Mon Sep 17 00:00:00 2001 From: sage Date: Thu, 17 Oct 2019 11:36:39 +0200 Subject: Refs #12990 -- Moved CheckFieldDefaultMixin to the django.db.models.fields.mixins. --- django/contrib/postgres/fields/array.py | 2 +- django/contrib/postgres/fields/hstore.py | 3 +-- django/contrib/postgres/fields/jsonb.py | 3 +-- django/contrib/postgres/fields/mixins.py | 29 ----------------------------- django/db/models/fields/mixins.py | 30 ++++++++++++++++++++++++++++++ 5 files changed, 33 insertions(+), 34 deletions(-) delete mode 100644 django/contrib/postgres/fields/mixins.py (limited to 'django') diff --git a/django/contrib/postgres/fields/array.py b/django/contrib/postgres/fields/array.py index 1180795e8f..f8ce7911ef 100644 --- a/django/contrib/postgres/fields/array.py +++ b/django/contrib/postgres/fields/array.py @@ -5,11 +5,11 @@ from django.contrib.postgres.forms import SimpleArrayField from django.contrib.postgres.validators import ArrayMaxLengthValidator from django.core import checks, exceptions from django.db.models import Field, IntegerField, Transform +from django.db.models.fields.mixins import CheckFieldDefaultMixin from django.db.models.lookups import Exact, In from django.utils.translation import gettext_lazy as _ from ..utils import prefix_validation_error -from .mixins import CheckFieldDefaultMixin from .utils import AttributeSetter __all__ = ['ArrayField'] diff --git a/django/contrib/postgres/fields/hstore.py b/django/contrib/postgres/fields/hstore.py index 0889f600a5..2ec5766041 100644 --- a/django/contrib/postgres/fields/hstore.py +++ b/django/contrib/postgres/fields/hstore.py @@ -4,10 +4,9 @@ from django.contrib.postgres import forms, lookups from django.contrib.postgres.fields.array import ArrayField from django.core import exceptions from django.db.models import Field, TextField, Transform +from django.db.models.fields.mixins import CheckFieldDefaultMixin from django.utils.translation import gettext_lazy as _ -from .mixins import CheckFieldDefaultMixin - __all__ = ['HStoreField'] diff --git a/django/contrib/postgres/fields/jsonb.py b/django/contrib/postgres/fields/jsonb.py index 30c48a6018..c402dd19d8 100644 --- a/django/contrib/postgres/fields/jsonb.py +++ b/django/contrib/postgres/fields/jsonb.py @@ -7,10 +7,9 @@ from django.core import exceptions from django.db.models import ( Field, TextField, Transform, lookups as builtin_lookups, ) +from django.db.models.fields.mixins import CheckFieldDefaultMixin from django.utils.translation import gettext_lazy as _ -from .mixins import CheckFieldDefaultMixin - __all__ = ['JSONField'] diff --git a/django/contrib/postgres/fields/mixins.py b/django/contrib/postgres/fields/mixins.py deleted file mode 100644 index 254b80c4a2..0000000000 --- a/django/contrib/postgres/fields/mixins.py +++ /dev/null @@ -1,29 +0,0 @@ -from django.core import checks - - -class CheckFieldDefaultMixin: - _default_hint = ('', '') - - def _check_default(self): - if self.has_default() and self.default is not None and not callable(self.default): - return [ - checks.Warning( - "%s default should be a callable instead of an instance so " - "that it's not shared between all field instances." % ( - self.__class__.__name__, - ), - hint=( - 'Use a callable instead, e.g., use `%s` instead of ' - '`%s`.' % self._default_hint - ), - obj=self, - id='postgres.E003', - ) - ] - else: - return [] - - def check(self, **kwargs): - errors = super().check(**kwargs) - errors.extend(self._check_default()) - return errors diff --git a/django/db/models/fields/mixins.py b/django/db/models/fields/mixins.py index c6dbc4ec5e..3afa8d9304 100644 --- a/django/db/models/fields/mixins.py +++ b/django/db/models/fields/mixins.py @@ -1,3 +1,5 @@ +from django.core import checks + NOT_PROVIDED = object() @@ -24,3 +26,31 @@ class FieldCacheMixin: def delete_cached_value(self, instance): del instance._state.fields_cache[self.get_cache_name()] + + +class CheckFieldDefaultMixin: + _default_hint = ('', '') + + def _check_default(self): + if self.has_default() and self.default is not None and not callable(self.default): + return [ + checks.Warning( + "%s default should be a callable instead of an instance " + "so that it's not shared between all field instances." % ( + self.__class__.__name__, + ), + hint=( + 'Use a callable instead, e.g., use `%s` instead of ' + '`%s`.' % self._default_hint + ), + obj=self, + id='fields.E010', + ) + ] + else: + return [] + + def check(self, **kwargs): + errors = super().check(**kwargs) + errors.extend(self._check_default()) + return errors -- cgit v1.3