diff options
| author | sage <laymonage@gmail.com> | 2019-10-17 11:36:39 +0200 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2019-10-17 12:30:29 +0200 |
| commit | 6f82df69efa372fb4bddf272fff577850a09f1dc (patch) | |
| tree | 719b621431e229fbc02bb2a70183a2a32d344d27 /django/db/models/fields | |
| parent | 187a64608d2a207dfc12fdd6816526e9550069b7 (diff) | |
Refs #12990 -- Moved CheckFieldDefaultMixin to the django.db.models.fields.mixins.
Diffstat (limited to 'django/db/models/fields')
| -rw-r--r-- | django/db/models/fields/mixins.py | 30 |
1 files changed, 30 insertions, 0 deletions
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 = ('<valid default>', '<invalid default>') + + 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 |
