30 lines
986 B
Python
30 lines
986 B
Python
from django.core import checks
|
|
|
|
|
|
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='postgres.E003',
|
|
)
|
|
]
|
|
else:
|
|
return []
|
|
|
|
def check(self, **kwargs):
|
|
errors = super().check(**kwargs)
|
|
errors.extend(self._check_default())
|
|
return errors
|