summaryrefslogtreecommitdiff
path: root/django/db/models/fields
diff options
context:
space:
mode:
authorsage <laymonage@gmail.com>2019-10-17 11:36:39 +0200
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2019-10-17 12:30:29 +0200
commit6f82df69efa372fb4bddf272fff577850a09f1dc (patch)
tree719b621431e229fbc02bb2a70183a2a32d344d27 /django/db/models/fields
parent187a64608d2a207dfc12fdd6816526e9550069b7 (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.py30
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