mirror of
https://github.com/django/django.git
synced 2025-10-25 22:56:12 +00:00
Removed unneeded hint=None/obj=None in system check messages.
This commit is contained in:
@@ -123,7 +123,6 @@ class BaseModelAdminChecks(object):
|
||||
return [
|
||||
checks.Error(
|
||||
"Both 'fieldsets' and 'fields' are specified.",
|
||||
hint=None,
|
||||
obj=obj.__class__,
|
||||
id='admin.E005',
|
||||
)
|
||||
@@ -133,7 +132,6 @@ class BaseModelAdminChecks(object):
|
||||
return [
|
||||
checks.Error(
|
||||
"The value of 'fields' contains duplicate field(s).",
|
||||
hint=None,
|
||||
obj=obj.__class__,
|
||||
id='admin.E006',
|
||||
)
|
||||
@@ -172,7 +170,6 @@ class BaseModelAdminChecks(object):
|
||||
return [
|
||||
checks.Error(
|
||||
"The value of '%s[1]' must contain the key 'fields'." % label,
|
||||
hint=None,
|
||||
obj=obj.__class__,
|
||||
id='admin.E011',
|
||||
)
|
||||
@@ -185,7 +182,6 @@ class BaseModelAdminChecks(object):
|
||||
return [
|
||||
checks.Error(
|
||||
"There are duplicate field(s) in '%s[1]'." % label,
|
||||
hint=None,
|
||||
obj=obj.__class__,
|
||||
id='admin.E012',
|
||||
)
|
||||
@@ -226,10 +222,9 @@ class BaseModelAdminChecks(object):
|
||||
not field.remote_field.through._meta.auto_created):
|
||||
return [
|
||||
checks.Error(
|
||||
("The value of '%s' cannot include the ManyToManyField '%s', "
|
||||
"because that field manually specifies a relationship model.")
|
||||
"The value of '%s' cannot include the ManyToManyField '%s', "
|
||||
"because that field manually specifies a relationship model."
|
||||
% (label, field_name),
|
||||
hint=None,
|
||||
obj=obj.__class__,
|
||||
id='admin.E013',
|
||||
)
|
||||
@@ -248,7 +243,6 @@ class BaseModelAdminChecks(object):
|
||||
return [
|
||||
checks.Error(
|
||||
"The value of 'exclude' contains duplicate field(s).",
|
||||
hint=None,
|
||||
obj=obj.__class__,
|
||||
id='admin.E015',
|
||||
)
|
||||
@@ -337,7 +331,6 @@ class BaseModelAdminChecks(object):
|
||||
"instance of ForeignKey, and does not have a 'choices' definition." % (
|
||||
label, field_name
|
||||
),
|
||||
hint=None,
|
||||
obj=obj.__class__,
|
||||
id='admin.E023',
|
||||
)
|
||||
@@ -354,7 +347,6 @@ class BaseModelAdminChecks(object):
|
||||
return [
|
||||
checks.Error(
|
||||
"The value of '%s' must be either admin.HORIZONTAL or admin.VERTICAL." % label,
|
||||
hint=None,
|
||||
obj=obj.__class__,
|
||||
id='admin.E024',
|
||||
)
|
||||
@@ -368,7 +360,6 @@ class BaseModelAdminChecks(object):
|
||||
return [
|
||||
checks.Error(
|
||||
"The value of 'view_on_site' must be a callable or a boolean value.",
|
||||
hint=None,
|
||||
obj=obj.__class__,
|
||||
id='admin.E025',
|
||||
)
|
||||
@@ -414,10 +405,7 @@ class BaseModelAdminChecks(object):
|
||||
return [
|
||||
checks.Error(
|
||||
"The value of '%s' refers to '%s', which must not be a DateTimeField, "
|
||||
"ForeignKey or ManyToManyField." % (
|
||||
label, field_name
|
||||
),
|
||||
hint=None,
|
||||
"ForeignKey or ManyToManyField." % (label, field_name),
|
||||
obj=obj.__class__,
|
||||
id='admin.E028',
|
||||
)
|
||||
@@ -444,8 +432,7 @@ class BaseModelAdminChecks(object):
|
||||
try:
|
||||
model._meta.get_field(field_name)
|
||||
except FieldDoesNotExist:
|
||||
return refer_to_missing_field(field=field_name, option=label,
|
||||
model=model, obj=obj, id='admin.E030')
|
||||
return refer_to_missing_field(field=field_name, option=label, model=model, obj=obj, id='admin.E030')
|
||||
else:
|
||||
return []
|
||||
|
||||
@@ -469,8 +456,8 @@ class BaseModelAdminChecks(object):
|
||||
if field_name == '?' and len(obj.ordering) != 1:
|
||||
return [
|
||||
checks.Error(
|
||||
("The value of 'ordering' has the random ordering marker '?', "
|
||||
"but contains other fields as well."),
|
||||
"The value of 'ordering' has the random ordering marker '?', "
|
||||
"but contains other fields as well.",
|
||||
hint='Either remove the "?", or remove the other fields.',
|
||||
obj=obj.__class__,
|
||||
id='admin.E032',
|
||||
@@ -489,8 +476,7 @@ class BaseModelAdminChecks(object):
|
||||
try:
|
||||
model._meta.get_field(field_name)
|
||||
except FieldDoesNotExist:
|
||||
return refer_to_missing_field(field=field_name, option=label,
|
||||
model=model, obj=obj, id='admin.E033')
|
||||
return refer_to_missing_field(field=field_name, option=label, model=model, obj=obj, id='admin.E033')
|
||||
else:
|
||||
return []
|
||||
|
||||
@@ -523,7 +509,6 @@ class BaseModelAdminChecks(object):
|
||||
"The value of '%s' is not a callable, an attribute of '%s', or an attribute of '%s.%s'." % (
|
||||
label, obj.__class__.__name__, model._meta.app_label, model._meta.object_name
|
||||
),
|
||||
hint=None,
|
||||
obj=obj.__class__,
|
||||
id='admin.E035',
|
||||
)
|
||||
@@ -589,7 +574,6 @@ class ModelAdminChecks(BaseModelAdminChecks):
|
||||
return [
|
||||
checks.Error(
|
||||
"'%s' must inherit from 'BaseModelAdmin'." % inline_label,
|
||||
hint=None,
|
||||
obj=obj.__class__,
|
||||
id='admin.E104',
|
||||
)
|
||||
@@ -598,14 +582,12 @@ class ModelAdminChecks(BaseModelAdminChecks):
|
||||
return [
|
||||
checks.Error(
|
||||
"'%s' must have a 'model' attribute." % inline_label,
|
||||
hint=None,
|
||||
obj=obj.__class__,
|
||||
id='admin.E105',
|
||||
)
|
||||
]
|
||||
elif not issubclass(inline.model, models.Model):
|
||||
return must_be('a Model', option='%s.model' % inline_label,
|
||||
obj=obj, id='admin.E106')
|
||||
return must_be('a Model', option='%s.model' % inline_label, obj=obj, id='admin.E106')
|
||||
else:
|
||||
return inline(model, obj.admin_site).check()
|
||||
|
||||
@@ -643,7 +625,6 @@ class ModelAdminChecks(BaseModelAdminChecks):
|
||||
"callable, an attribute of '%s', or an attribute or method on '%s.%s'." % (
|
||||
label, item, obj.__class__.__name__, model._meta.app_label, model._meta.object_name
|
||||
),
|
||||
hint=None,
|
||||
obj=obj.__class__,
|
||||
id='admin.E108',
|
||||
)
|
||||
@@ -652,7 +633,6 @@ class ModelAdminChecks(BaseModelAdminChecks):
|
||||
return [
|
||||
checks.Error(
|
||||
"The value of '%s' must not be a ManyToManyField." % label,
|
||||
hint=None,
|
||||
obj=obj.__class__,
|
||||
id='admin.E109',
|
||||
)
|
||||
@@ -671,7 +651,6 @@ class ModelAdminChecks(BaseModelAdminChecks):
|
||||
"an attribute of '%s', or an attribute or method on '%s.%s'." % (
|
||||
label, item, obj.__class__.__name__, model._meta.app_label, model._meta.object_name
|
||||
),
|
||||
hint=None,
|
||||
obj=obj.__class__,
|
||||
id='admin.E108',
|
||||
)
|
||||
@@ -700,7 +679,6 @@ class ModelAdminChecks(BaseModelAdminChecks):
|
||||
"The value of '%s' refers to '%s', which is not defined in 'list_display'." % (
|
||||
label, field_name
|
||||
),
|
||||
hint=None,
|
||||
obj=obj.__class__,
|
||||
id='admin.E111',
|
||||
)
|
||||
@@ -738,7 +716,6 @@ class ModelAdminChecks(BaseModelAdminChecks):
|
||||
return [
|
||||
checks.Error(
|
||||
"The value of '%s' must not inherit from 'FieldListFilter'." % label,
|
||||
hint=None,
|
||||
obj=obj.__class__,
|
||||
id='admin.E114',
|
||||
)
|
||||
@@ -749,8 +726,7 @@ class ModelAdminChecks(BaseModelAdminChecks):
|
||||
# item is option #2
|
||||
field, list_filter_class = item
|
||||
if not issubclass(list_filter_class, FieldListFilter):
|
||||
return must_inherit_from(parent='FieldListFilter', option='%s[1]' % label,
|
||||
obj=obj, id='admin.E115')
|
||||
return must_inherit_from(parent='FieldListFilter', option='%s[1]' % label, obj=obj, id='admin.E115')
|
||||
else:
|
||||
return []
|
||||
else:
|
||||
@@ -764,7 +740,6 @@ class ModelAdminChecks(BaseModelAdminChecks):
|
||||
return [
|
||||
checks.Error(
|
||||
"The value of '%s' refers to '%s', which does not refer to a Field." % (label, field),
|
||||
hint=None,
|
||||
obj=obj.__class__,
|
||||
id='admin.E116',
|
||||
)
|
||||
@@ -776,8 +751,7 @@ class ModelAdminChecks(BaseModelAdminChecks):
|
||||
""" Check that list_select_related is a boolean, a list or a tuple. """
|
||||
|
||||
if not isinstance(obj.list_select_related, (bool, list, tuple)):
|
||||
return must_be('a boolean, tuple or list', option='list_select_related',
|
||||
obj=obj, id='admin.E117')
|
||||
return must_be('a boolean, tuple or list', option='list_select_related', obj=obj, id='admin.E117')
|
||||
else:
|
||||
return []
|
||||
|
||||
@@ -813,15 +787,13 @@ class ModelAdminChecks(BaseModelAdminChecks):
|
||||
try:
|
||||
field = model._meta.get_field(field_name)
|
||||
except FieldDoesNotExist:
|
||||
return refer_to_missing_field(field=field_name, option=label,
|
||||
model=model, obj=obj, id='admin.E121')
|
||||
return refer_to_missing_field(field=field_name, option=label, model=model, obj=obj, id='admin.E121')
|
||||
else:
|
||||
if field_name not in obj.list_display:
|
||||
return [
|
||||
checks.Error(
|
||||
"The value of '%s' refers to '%s', which is not "
|
||||
"contained in 'list_display'." % (label, field_name),
|
||||
hint=None,
|
||||
obj=obj.__class__,
|
||||
id='admin.E122',
|
||||
)
|
||||
@@ -830,7 +802,6 @@ class ModelAdminChecks(BaseModelAdminChecks):
|
||||
return [
|
||||
checks.Error(
|
||||
"The value of '%s' cannot be in both 'list_editable' and 'list_display_links'." % field_name,
|
||||
hint=None,
|
||||
obj=obj.__class__,
|
||||
id='admin.E123',
|
||||
)
|
||||
@@ -845,7 +816,6 @@ class ModelAdminChecks(BaseModelAdminChecks):
|
||||
"which cannot be used unless 'list_display_links' is set." % (
|
||||
label, obj.list_display[0]
|
||||
),
|
||||
hint=None,
|
||||
obj=obj.__class__,
|
||||
id='admin.E124',
|
||||
)
|
||||
@@ -856,7 +826,6 @@ class ModelAdminChecks(BaseModelAdminChecks):
|
||||
"The value of '%s' refers to '%s', which is not editable through the admin." % (
|
||||
label, field_name
|
||||
),
|
||||
hint=None,
|
||||
obj=obj.__class__,
|
||||
id='admin.E125',
|
||||
)
|
||||
@@ -881,13 +850,13 @@ class ModelAdminChecks(BaseModelAdminChecks):
|
||||
try:
|
||||
field = obj.model._meta.get_field(obj.date_hierarchy)
|
||||
except FieldDoesNotExist:
|
||||
return refer_to_missing_field(option='date_hierarchy',
|
||||
field=obj.date_hierarchy,
|
||||
model=obj.model, obj=obj, id='admin.E127')
|
||||
return refer_to_missing_field(
|
||||
option='date_hierarchy', field=obj.date_hierarchy,
|
||||
model=obj.model, obj=obj, id='admin.E127',
|
||||
)
|
||||
else:
|
||||
if not isinstance(field, (models.DateField, models.DateTimeField)):
|
||||
return must_be('a DateField or DateTimeField', option='date_hierarchy',
|
||||
obj=obj, id='admin.E128')
|
||||
return must_be('a DateField or DateTimeField', option='date_hierarchy', obj=obj, id='admin.E128')
|
||||
else:
|
||||
return []
|
||||
|
||||
@@ -927,7 +896,6 @@ class InlineModelAdminChecks(BaseModelAdminChecks):
|
||||
"to the parent model '%s.%s'." % (
|
||||
fk.name, parent_model._meta.app_label, parent_model._meta.object_name
|
||||
),
|
||||
hint=None,
|
||||
obj=obj.__class__,
|
||||
id='admin.E201',
|
||||
)
|
||||
@@ -939,7 +907,7 @@ class InlineModelAdminChecks(BaseModelAdminChecks):
|
||||
try:
|
||||
_get_foreign_key(parent_model, obj.model, fk_name=obj.fk_name)
|
||||
except ValueError as e:
|
||||
return [checks.Error(e.args[0], hint=None, obj=obj.__class__, id='admin.E202')]
|
||||
return [checks.Error(e.args[0], obj=obj.__class__, id='admin.E202')]
|
||||
else:
|
||||
return []
|
||||
|
||||
@@ -975,8 +943,7 @@ class InlineModelAdminChecks(BaseModelAdminChecks):
|
||||
""" Check formset is a subclass of BaseModelFormSet. """
|
||||
|
||||
if not issubclass(obj.formset, BaseModelFormSet):
|
||||
return must_inherit_from(parent='BaseModelFormSet', option='formset',
|
||||
obj=obj, id='admin.E206')
|
||||
return must_inherit_from(parent='BaseModelFormSet', option='formset', obj=obj, id='admin.E206')
|
||||
else:
|
||||
return []
|
||||
|
||||
@@ -985,7 +952,6 @@ def must_be(type, option, obj, id):
|
||||
return [
|
||||
checks.Error(
|
||||
"The value of '%s' must be %s." % (option, type),
|
||||
hint=None,
|
||||
obj=obj.__class__,
|
||||
id=id,
|
||||
),
|
||||
@@ -996,7 +962,6 @@ def must_inherit_from(parent, option, obj, id):
|
||||
return [
|
||||
checks.Error(
|
||||
"The value of '%s' must inherit from '%s'." % (option, parent),
|
||||
hint=None,
|
||||
obj=obj.__class__,
|
||||
id=id,
|
||||
),
|
||||
@@ -1009,7 +974,6 @@ def refer_to_missing_field(field, option, model, obj, id):
|
||||
"The value of '%s' refers to '%s', which is not an attribute of '%s.%s'." % (
|
||||
option, field, model._meta.app_label, model._meta.object_name
|
||||
),
|
||||
hint=None,
|
||||
obj=obj.__class__,
|
||||
id=id,
|
||||
),
|
||||
|
||||
@@ -28,7 +28,6 @@ def check_user_model(app_configs=None, **kwargs):
|
||||
errors.append(
|
||||
checks.Error(
|
||||
"'REQUIRED_FIELDS' must be a list or tuple.",
|
||||
hint=None,
|
||||
obj=cls,
|
||||
id='auth.E001',
|
||||
)
|
||||
@@ -38,9 +37,8 @@ def check_user_model(app_configs=None, **kwargs):
|
||||
if cls.USERNAME_FIELD in cls.REQUIRED_FIELDS:
|
||||
errors.append(
|
||||
checks.Error(
|
||||
("The field named as the 'USERNAME_FIELD' "
|
||||
"for a custom user model must not be included in 'REQUIRED_FIELDS'."),
|
||||
hint=None,
|
||||
"The field named as the 'USERNAME_FIELD' "
|
||||
"for a custom user model must not be included in 'REQUIRED_FIELDS'.",
|
||||
obj=cls,
|
||||
id='auth.E002',
|
||||
)
|
||||
@@ -55,7 +53,6 @@ def check_user_model(app_configs=None, **kwargs):
|
||||
"'%s.%s' must be unique because it is named as the 'USERNAME_FIELD'." % (
|
||||
cls._meta.object_name, cls.USERNAME_FIELD
|
||||
),
|
||||
hint=None,
|
||||
obj=cls,
|
||||
id='auth.E003',
|
||||
)
|
||||
@@ -66,8 +63,7 @@ def check_user_model(app_configs=None, **kwargs):
|
||||
"'%s.%s' is named as the 'USERNAME_FIELD', but it is not unique." % (
|
||||
cls._meta.object_name, cls.USERNAME_FIELD
|
||||
),
|
||||
hint=('Ensure that your authentication backend(s) can handle '
|
||||
'non-unique usernames.'),
|
||||
hint='Ensure that your authentication backend(s) can handle non-unique usernames.',
|
||||
obj=cls,
|
||||
id='auth.W004',
|
||||
)
|
||||
|
||||
@@ -33,7 +33,6 @@ class GenericInlineModelAdminChecks(InlineModelAdminChecks):
|
||||
"'%s.%s' has no GenericForeignKey." % (
|
||||
obj.model._meta.app_label, obj.model._meta.object_name
|
||||
),
|
||||
hint=None,
|
||||
obj=obj.__class__,
|
||||
id='admin.E301'
|
||||
)
|
||||
@@ -48,7 +47,6 @@ class GenericInlineModelAdminChecks(InlineModelAdminChecks):
|
||||
"'ct_field' references '%s', which is not a field on '%s.%s'." % (
|
||||
obj.ct_field, obj.model._meta.app_label, obj.model._meta.object_name
|
||||
),
|
||||
hint=None,
|
||||
obj=obj.__class__,
|
||||
id='admin.E302'
|
||||
)
|
||||
@@ -62,7 +60,6 @@ class GenericInlineModelAdminChecks(InlineModelAdminChecks):
|
||||
"'ct_fk_field' references '%s', which is not a field on '%s.%s'." % (
|
||||
obj.ct_fk_field, obj.model._meta.app_label, obj.model._meta.object_name
|
||||
),
|
||||
hint=None,
|
||||
obj=obj.__class__,
|
||||
id='admin.E303'
|
||||
)
|
||||
@@ -79,7 +76,6 @@ class GenericInlineModelAdminChecks(InlineModelAdminChecks):
|
||||
"'%s.%s' has no GenericForeignKey using content type field '%s' and object ID field '%s'." % (
|
||||
obj.model._meta.app_label, obj.model._meta.object_name, obj.ct_field, obj.ct_fk_field
|
||||
),
|
||||
hint=None,
|
||||
obj=obj.__class__,
|
||||
id='admin.E304'
|
||||
)
|
||||
|
||||
@@ -92,7 +92,6 @@ class GenericForeignKey(object):
|
||||
return [
|
||||
checks.Error(
|
||||
'Field names must not end with an underscore.',
|
||||
hint=None,
|
||||
obj=self,
|
||||
id='fields.E001',
|
||||
)
|
||||
@@ -107,7 +106,6 @@ class GenericForeignKey(object):
|
||||
return [
|
||||
checks.Error(
|
||||
"The GenericForeignKey object ID references the non-existent field '%s'." % self.fk_field,
|
||||
hint=None,
|
||||
obj=self,
|
||||
id='contenttypes.E001',
|
||||
)
|
||||
@@ -128,7 +126,6 @@ class GenericForeignKey(object):
|
||||
"The GenericForeignKey content type references the non-existent field '%s.%s'." % (
|
||||
self.model._meta.object_name, self.ct_field
|
||||
),
|
||||
hint=None,
|
||||
obj=self,
|
||||
id='contenttypes.E002',
|
||||
)
|
||||
@@ -343,11 +340,10 @@ class GenericRelation(ForeignObject):
|
||||
else:
|
||||
return [
|
||||
checks.Error(
|
||||
("The GenericRelation defines a relation with the model "
|
||||
"'%s.%s', but that model does not have a GenericForeignKey.") % (
|
||||
"The GenericRelation defines a relation with the model "
|
||||
"'%s.%s', but that model does not have a GenericForeignKey." % (
|
||||
target._meta.app_label, target._meta.object_name
|
||||
),
|
||||
hint=None,
|
||||
obj=self,
|
||||
id='contenttypes.E004',
|
||||
)
|
||||
|
||||
@@ -48,7 +48,6 @@ class ArrayField(Field):
|
||||
errors.append(
|
||||
checks.Error(
|
||||
'Base field for array cannot be a related field.',
|
||||
hint=None,
|
||||
obj=self,
|
||||
id='postgres.E002'
|
||||
)
|
||||
@@ -61,7 +60,6 @@ class ArrayField(Field):
|
||||
errors.append(
|
||||
checks.Error(
|
||||
'Base field for array has errors:\n %s' % messages,
|
||||
hint=None,
|
||||
obj=self,
|
||||
id='postgres.E001'
|
||||
)
|
||||
|
||||
@@ -29,7 +29,6 @@ class CurrentSiteManager(models.Manager):
|
||||
return [
|
||||
checks.Error(
|
||||
"CurrentSiteManager could not find a field named '%s'." % field_name,
|
||||
hint=None,
|
||||
obj=self,
|
||||
id='sites.E001',
|
||||
)
|
||||
@@ -41,7 +40,6 @@ class CurrentSiteManager(models.Manager):
|
||||
"CurrentSiteManager cannot use '%s.%s' as it is not a ForeignKey or ManyToManyField." % (
|
||||
self.model._meta.object_name, field_name
|
||||
),
|
||||
hint=None,
|
||||
obj=self,
|
||||
id='sites.E002',
|
||||
)
|
||||
|
||||
@@ -20,10 +20,8 @@ def check_all_models(app_configs=None, **kwargs):
|
||||
if not inspect.ismethod(model.check):
|
||||
errors.append(
|
||||
Error(
|
||||
"The '%s.check()' class method is "
|
||||
"currently overridden by %r." % (
|
||||
model.__name__, model.check),
|
||||
hint=None,
|
||||
"The '%s.check()' class method is currently overridden by %r."
|
||||
% (model.__name__, model.check),
|
||||
obj=model,
|
||||
id='models.E020'
|
||||
)
|
||||
@@ -61,7 +59,6 @@ def check_model_signals(app_configs=None, **kwargs):
|
||||
description, name, '.'.join(reference)
|
||||
),
|
||||
obj=receiver.__module__,
|
||||
hint=None,
|
||||
id='signals.E001'
|
||||
)
|
||||
)
|
||||
|
||||
@@ -26,8 +26,7 @@ class DatabaseValidation(BaseDatabaseValidation):
|
||||
and (field.max_length is None or int(field.max_length) > 255)):
|
||||
errors.append(
|
||||
checks.Error(
|
||||
('MySQL does not allow unique CharFields to have a max_length > 255.'),
|
||||
hint=None,
|
||||
'MySQL does not allow unique CharFields to have a max_length > 255.',
|
||||
obj=field,
|
||||
id='mysql.E001',
|
||||
)
|
||||
|
||||
@@ -1194,8 +1194,6 @@ class Model(six.with_metaclass(ModelBase)):
|
||||
errors.append(
|
||||
checks.Error(
|
||||
"'%s' is not of the form 'app_label.app_name'." % cls._meta.swappable,
|
||||
hint=None,
|
||||
obj=None,
|
||||
id='models.E001',
|
||||
)
|
||||
)
|
||||
@@ -1207,8 +1205,6 @@ class Model(six.with_metaclass(ModelBase)):
|
||||
"installed, or is abstract." % (
|
||||
cls._meta.swappable, app_label, model_name
|
||||
),
|
||||
hint=None,
|
||||
obj=None,
|
||||
id='models.E002',
|
||||
)
|
||||
)
|
||||
@@ -1222,8 +1218,6 @@ class Model(six.with_metaclass(ModelBase)):
|
||||
errors.append(
|
||||
checks.Error(
|
||||
"Proxy model '%s' contains model fields." % cls.__name__,
|
||||
hint=None,
|
||||
obj=None,
|
||||
id='models.E017',
|
||||
)
|
||||
)
|
||||
@@ -1272,7 +1266,6 @@ class Model(six.with_metaclass(ModelBase)):
|
||||
checks.Error(
|
||||
"The model has two many-to-many relations through "
|
||||
"the intermediate model '%s'." % f.remote_field.through._meta.label,
|
||||
hint=None,
|
||||
obj=cls,
|
||||
id='models.E003',
|
||||
)
|
||||
@@ -1293,7 +1286,6 @@ class Model(six.with_metaclass(ModelBase)):
|
||||
checks.Error(
|
||||
"'id' can only be used as a field name if the field also "
|
||||
"sets 'primary_key=True'.",
|
||||
hint=None,
|
||||
obj=cls,
|
||||
id='models.E004',
|
||||
)
|
||||
@@ -1321,7 +1313,6 @@ class Model(six.with_metaclass(ModelBase)):
|
||||
clash.name, clash.model._meta,
|
||||
f.name, f.model._meta
|
||||
),
|
||||
hint=None,
|
||||
obj=cls,
|
||||
id='models.E005',
|
||||
)
|
||||
@@ -1352,7 +1343,6 @@ class Model(six.with_metaclass(ModelBase)):
|
||||
"from model '%s'." % (
|
||||
f.name, clash.name, clash.model._meta
|
||||
),
|
||||
hint=None,
|
||||
obj=f,
|
||||
id='models.E006',
|
||||
)
|
||||
@@ -1394,7 +1384,6 @@ class Model(six.with_metaclass(ModelBase)):
|
||||
return [
|
||||
checks.Error(
|
||||
"'index_together' must be a list or tuple.",
|
||||
hint=None,
|
||||
obj=cls,
|
||||
id='models.E008',
|
||||
)
|
||||
@@ -1405,7 +1394,6 @@ class Model(six.with_metaclass(ModelBase)):
|
||||
return [
|
||||
checks.Error(
|
||||
"All 'index_together' elements must be lists or tuples.",
|
||||
hint=None,
|
||||
obj=cls,
|
||||
id='models.E009',
|
||||
)
|
||||
@@ -1424,7 +1412,6 @@ class Model(six.with_metaclass(ModelBase)):
|
||||
return [
|
||||
checks.Error(
|
||||
"'unique_together' must be a list or tuple.",
|
||||
hint=None,
|
||||
obj=cls,
|
||||
id='models.E010',
|
||||
)
|
||||
@@ -1435,7 +1422,6 @@ class Model(six.with_metaclass(ModelBase)):
|
||||
return [
|
||||
checks.Error(
|
||||
"All 'unique_together' elements must be lists or tuples.",
|
||||
hint=None,
|
||||
obj=cls,
|
||||
id='models.E011',
|
||||
)
|
||||
@@ -1467,7 +1453,6 @@ class Model(six.with_metaclass(ModelBase)):
|
||||
"'%s' refers to the non-existent field '%s'." % (
|
||||
option, field_name,
|
||||
),
|
||||
hint=None,
|
||||
obj=cls,
|
||||
id='models.E012',
|
||||
)
|
||||
@@ -1480,7 +1465,6 @@ class Model(six.with_metaclass(ModelBase)):
|
||||
"ManyToManyFields are not permitted in '%s'." % (
|
||||
option, field_name, option,
|
||||
),
|
||||
hint=None,
|
||||
obj=cls,
|
||||
id='models.E013',
|
||||
)
|
||||
@@ -1488,12 +1472,9 @@ class Model(six.with_metaclass(ModelBase)):
|
||||
elif field not in cls._meta.local_fields:
|
||||
errors.append(
|
||||
checks.Error(
|
||||
("'%s' refers to field '%s' which is not local "
|
||||
"to model '%s'.") % (
|
||||
option, field_name, cls._meta.object_name,
|
||||
),
|
||||
hint=("This issue may be caused by multi-table "
|
||||
"inheritance."),
|
||||
"'%s' refers to field '%s' which is not local to model '%s'."
|
||||
% (option, field_name, cls._meta.object_name),
|
||||
hint="This issue may be caused by multi-table inheritance.",
|
||||
obj=cls,
|
||||
id='models.E016',
|
||||
)
|
||||
@@ -1508,7 +1489,6 @@ class Model(six.with_metaclass(ModelBase)):
|
||||
return [
|
||||
checks.Error(
|
||||
"'ordering' and 'order_with_respect_to' cannot be used together.",
|
||||
hint=None,
|
||||
obj=cls,
|
||||
id='models.E021',
|
||||
),
|
||||
@@ -1520,9 +1500,7 @@ class Model(six.with_metaclass(ModelBase)):
|
||||
if not isinstance(cls._meta.ordering, (list, tuple)):
|
||||
return [
|
||||
checks.Error(
|
||||
("'ordering' must be a tuple or list "
|
||||
"(even if you want to order by only one field)."),
|
||||
hint=None,
|
||||
"'ordering' must be a tuple or list (even if you want to order by only one field).",
|
||||
obj=cls,
|
||||
id='models.E014',
|
||||
)
|
||||
@@ -1562,7 +1540,6 @@ class Model(six.with_metaclass(ModelBase)):
|
||||
errors.append(
|
||||
checks.Error(
|
||||
"'ordering' refers to the non-existent field '%s'." % invalid_field,
|
||||
hint=None,
|
||||
obj=cls,
|
||||
id='models.E015',
|
||||
)
|
||||
@@ -1629,9 +1606,10 @@ class Model(six.with_metaclass(ModelBase)):
|
||||
'Autogenerated column name too long for M2M field '
|
||||
'"%s". Maximum length is "%s" for database "%s".'
|
||||
% (rel_name, allowed_len, db_alias),
|
||||
hint=("Use 'through' to create a separate model "
|
||||
"for M2M and then set column_name using "
|
||||
"'db_column'."),
|
||||
hint=(
|
||||
"Use 'through' to create a separate model for "
|
||||
"M2M and then set column_name using 'db_column'."
|
||||
),
|
||||
obj=cls,
|
||||
id='models.E019',
|
||||
)
|
||||
|
||||
@@ -217,7 +217,6 @@ class Field(RegisterLookupMixin):
|
||||
return [
|
||||
checks.Error(
|
||||
'Field names must not end with an underscore.',
|
||||
hint=None,
|
||||
obj=self,
|
||||
id='fields.E001',
|
||||
)
|
||||
@@ -226,7 +225,6 @@ class Field(RegisterLookupMixin):
|
||||
return [
|
||||
checks.Error(
|
||||
'Field names must not contain "__".',
|
||||
hint=None,
|
||||
obj=self,
|
||||
id='fields.E002',
|
||||
)
|
||||
@@ -235,7 +233,6 @@ class Field(RegisterLookupMixin):
|
||||
return [
|
||||
checks.Error(
|
||||
"'pk' is a reserved word that cannot be used as a field name.",
|
||||
hint=None,
|
||||
obj=self,
|
||||
id='fields.E003',
|
||||
)
|
||||
@@ -257,7 +254,6 @@ class Field(RegisterLookupMixin):
|
||||
return [
|
||||
checks.Error(
|
||||
"'choices' must be an iterable (e.g., a list or tuple).",
|
||||
hint=None,
|
||||
obj=self,
|
||||
id='fields.E004',
|
||||
)
|
||||
@@ -267,9 +263,8 @@ class Field(RegisterLookupMixin):
|
||||
for choice in self.choices):
|
||||
return [
|
||||
checks.Error(
|
||||
("'choices' must be an iterable containing "
|
||||
"(actual value, human readable name) tuples."),
|
||||
hint=None,
|
||||
"'choices' must be an iterable containing "
|
||||
"(actual value, human readable name) tuples.",
|
||||
obj=self,
|
||||
id='fields.E005',
|
||||
)
|
||||
@@ -284,7 +279,6 @@ class Field(RegisterLookupMixin):
|
||||
return [
|
||||
checks.Error(
|
||||
"'db_index' must be None, True or False.",
|
||||
hint=None,
|
||||
obj=self,
|
||||
id='fields.E006',
|
||||
)
|
||||
@@ -939,7 +933,6 @@ class AutoField(Field):
|
||||
return [
|
||||
checks.Error(
|
||||
'AutoFields must set primary_key=True.',
|
||||
hint=None,
|
||||
obj=self,
|
||||
id='fields.E100',
|
||||
),
|
||||
@@ -1103,7 +1096,6 @@ class CharField(Field):
|
||||
return [
|
||||
checks.Error(
|
||||
"CharFields must define a 'max_length' attribute.",
|
||||
hint=None,
|
||||
obj=self,
|
||||
id='fields.E120',
|
||||
)
|
||||
@@ -1112,7 +1104,6 @@ class CharField(Field):
|
||||
return [
|
||||
checks.Error(
|
||||
"'max_length' must be a positive integer.",
|
||||
hint=None,
|
||||
obj=self,
|
||||
id='fields.E121',
|
||||
)
|
||||
@@ -1188,7 +1179,6 @@ class DateTimeCheckMixin(object):
|
||||
"The options auto_now, auto_now_add, and default "
|
||||
"are mutually exclusive. Only one of these options "
|
||||
"may be present.",
|
||||
hint=None,
|
||||
obj=self,
|
||||
id='fields.E160',
|
||||
)
|
||||
@@ -1535,7 +1525,6 @@ class DecimalField(Field):
|
||||
return [
|
||||
checks.Error(
|
||||
"DecimalFields must define a 'decimal_places' attribute.",
|
||||
hint=None,
|
||||
obj=self,
|
||||
id='fields.E130',
|
||||
)
|
||||
@@ -1544,7 +1533,6 @@ class DecimalField(Field):
|
||||
return [
|
||||
checks.Error(
|
||||
"'decimal_places' must be a non-negative integer.",
|
||||
hint=None,
|
||||
obj=self,
|
||||
id='fields.E131',
|
||||
)
|
||||
@@ -1561,7 +1549,6 @@ class DecimalField(Field):
|
||||
return [
|
||||
checks.Error(
|
||||
"DecimalFields must define a 'max_digits' attribute.",
|
||||
hint=None,
|
||||
obj=self,
|
||||
id='fields.E132',
|
||||
)
|
||||
@@ -1570,7 +1557,6 @@ class DecimalField(Field):
|
||||
return [
|
||||
checks.Error(
|
||||
"'max_digits' must be a positive integer.",
|
||||
hint=None,
|
||||
obj=self,
|
||||
id='fields.E133',
|
||||
)
|
||||
@@ -1583,7 +1569,6 @@ class DecimalField(Field):
|
||||
return [
|
||||
checks.Error(
|
||||
"'max_digits' must be greater or equal to 'decimal_places'.",
|
||||
hint=None,
|
||||
obj=self,
|
||||
id='fields.E134',
|
||||
)
|
||||
@@ -1762,7 +1747,6 @@ class FilePathField(Field):
|
||||
return [
|
||||
checks.Error(
|
||||
"FilePathFields must have either 'allow_files' or 'allow_folders' set to True.",
|
||||
hint=None,
|
||||
obj=self,
|
||||
id='fields.E140',
|
||||
)
|
||||
@@ -1982,9 +1966,8 @@ class GenericIPAddressField(Field):
|
||||
if not getattr(self, 'null', False) and getattr(self, 'blank', False):
|
||||
return [
|
||||
checks.Error(
|
||||
('GenericIPAddressFields cannot have blank=True if null=False, '
|
||||
'as blank values are stored as nulls.'),
|
||||
hint=None,
|
||||
'GenericIPAddressFields cannot have blank=True if null=False, '
|
||||
'as blank values are stored as nulls.',
|
||||
obj=self,
|
||||
id='fields.E150',
|
||||
)
|
||||
|
||||
@@ -245,7 +245,6 @@ class FileField(Field):
|
||||
return [
|
||||
checks.Error(
|
||||
"'unique' is not a valid argument for a %s." % self.__class__.__name__,
|
||||
hint=None,
|
||||
obj=self,
|
||||
id='fields.E200',
|
||||
)
|
||||
@@ -258,7 +257,6 @@ class FileField(Field):
|
||||
return [
|
||||
checks.Error(
|
||||
"'primary_key' is not a valid argument for a %s." % self.__class__.__name__,
|
||||
hint=None,
|
||||
obj=self,
|
||||
id='fields.E201',
|
||||
)
|
||||
|
||||
@@ -153,9 +153,8 @@ class RelatedField(Field):
|
||||
if rel_is_missing and (rel_is_string or not self.remote_field.model._meta.swapped):
|
||||
return [
|
||||
checks.Error(
|
||||
("Field defines a relation with model '%s', which "
|
||||
"is either not installed, or is abstract.") % model_name,
|
||||
hint=None,
|
||||
"Field defines a relation with model '%s', which is either "
|
||||
"not installed, or is abstract." % model_name,
|
||||
obj=self,
|
||||
id='fields.E300',
|
||||
)
|
||||
@@ -172,8 +171,8 @@ class RelatedField(Field):
|
||||
)
|
||||
return [
|
||||
checks.Error(
|
||||
("Field defines a relation with the model '%s', "
|
||||
"which has been swapped out.") % model,
|
||||
"Field defines a relation with the model '%s', which has "
|
||||
"been swapped out." % model,
|
||||
hint="Update the relation to point at 'settings.%s'." % self.remote_field.model._meta.swappable,
|
||||
obj=self,
|
||||
id='fields.E301',
|
||||
@@ -511,9 +510,8 @@ class ForeignObject(RelatedField):
|
||||
model_name = self.remote_field.model.__name__
|
||||
return [
|
||||
checks.Error(
|
||||
("'%s.%s' must set unique=True "
|
||||
"because it is referenced by a foreign key.") % (model_name, field_name),
|
||||
hint=None,
|
||||
"'%s.%s' must set unique=True because it is referenced by "
|
||||
"a foreign key." % (model_name, field_name),
|
||||
obj=self,
|
||||
id='fields.E311',
|
||||
)
|
||||
@@ -1161,7 +1159,6 @@ class ManyToManyField(RelatedField):
|
||||
return [
|
||||
checks.Error(
|
||||
'ManyToManyFields cannot be unique.',
|
||||
hint=None,
|
||||
obj=self,
|
||||
id='fields.E330',
|
||||
)
|
||||
@@ -1175,7 +1172,6 @@ class ManyToManyField(RelatedField):
|
||||
warnings.append(
|
||||
checks.Warning(
|
||||
'null has no effect on ManyToManyField.',
|
||||
hint=None,
|
||||
obj=self,
|
||||
id='fields.W340',
|
||||
)
|
||||
@@ -1185,7 +1181,6 @@ class ManyToManyField(RelatedField):
|
||||
warnings.append(
|
||||
checks.Warning(
|
||||
'ManyToManyField does not support validators.',
|
||||
hint=None,
|
||||
obj=self,
|
||||
id='fields.W341',
|
||||
)
|
||||
@@ -1206,23 +1201,19 @@ class ManyToManyField(RelatedField):
|
||||
# The relationship model is not installed.
|
||||
errors.append(
|
||||
checks.Error(
|
||||
("Field specifies a many-to-many relation through model "
|
||||
"'%s', which has not been installed.") %
|
||||
qualified_model_name,
|
||||
hint=None,
|
||||
"Field specifies a many-to-many relation through model "
|
||||
"'%s', which has not been installed." % qualified_model_name,
|
||||
obj=self,
|
||||
id='fields.E331',
|
||||
)
|
||||
)
|
||||
|
||||
else:
|
||||
|
||||
assert from_model is not None, (
|
||||
"ManyToManyField with intermediate "
|
||||
"tables cannot be checked if you don't pass the model "
|
||||
"where the field is attached to."
|
||||
)
|
||||
|
||||
# Set some useful local variables
|
||||
to_model = resolve_relation(from_model, self.remote_field.model)
|
||||
from_model_name = from_model._meta.object_name
|
||||
@@ -1239,7 +1230,6 @@ class ManyToManyField(RelatedField):
|
||||
errors.append(
|
||||
checks.Error(
|
||||
'Many-to-many fields with intermediate tables must not be symmetrical.',
|
||||
hint=None,
|
||||
obj=self,
|
||||
id='fields.E332',
|
||||
)
|
||||
@@ -1253,13 +1243,12 @@ class ManyToManyField(RelatedField):
|
||||
if seen_self > 2 and not self.remote_field.through_fields:
|
||||
errors.append(
|
||||
checks.Error(
|
||||
("The model is used as an intermediate model by "
|
||||
"'%s', but it has more than two foreign keys "
|
||||
"to '%s', which is ambiguous. You must specify "
|
||||
"which two foreign keys Django should use via the "
|
||||
"through_fields keyword argument.") % (self, from_model_name),
|
||||
hint=("Use through_fields to specify which two "
|
||||
"foreign keys Django should use."),
|
||||
"The model is used as an intermediate model by "
|
||||
"'%s', but it has more than two foreign keys "
|
||||
"to '%s', which is ambiguous. You must specify "
|
||||
"which two foreign keys Django should use via the "
|
||||
"through_fields keyword argument." % (self, from_model_name),
|
||||
hint="Use through_fields to specify which two foreign keys Django should use.",
|
||||
obj=self.remote_field.through,
|
||||
id='fields.E333',
|
||||
)
|
||||
@@ -1280,9 +1269,10 @@ class ManyToManyField(RelatedField):
|
||||
"from '%s', which is ambiguous. You must specify "
|
||||
"which foreign key Django should use via the "
|
||||
"through_fields keyword argument.") % (self, from_model_name),
|
||||
hint=('If you want to create a recursive relationship, '
|
||||
'use ForeignKey("self", symmetrical=False, '
|
||||
'through="%s").') % relationship_model_name,
|
||||
hint=(
|
||||
'If you want to create a recursive relationship, '
|
||||
'use ForeignKey("self", symmetrical=False, through="%s").'
|
||||
) % relationship_model_name,
|
||||
obj=self,
|
||||
id='fields.E334',
|
||||
)
|
||||
@@ -1291,14 +1281,15 @@ class ManyToManyField(RelatedField):
|
||||
if seen_to > 1 and not self.remote_field.through_fields:
|
||||
errors.append(
|
||||
checks.Error(
|
||||
("The model is used as an intermediate model by "
|
||||
"'%s', but it has more than one foreign key "
|
||||
"to '%s', which is ambiguous. You must specify "
|
||||
"which foreign key Django should use via the "
|
||||
"through_fields keyword argument.") % (self, to_model_name),
|
||||
hint=('If you want to create a recursive '
|
||||
'relationship, use ForeignKey("self", '
|
||||
'symmetrical=False, through="%s").') % relationship_model_name,
|
||||
"The model is used as an intermediate model by "
|
||||
"'%s', but it has more than one foreign key "
|
||||
"to '%s', which is ambiguous. You must specify "
|
||||
"which foreign key Django should use via the "
|
||||
"through_fields keyword argument." % (self, to_model_name),
|
||||
hint=(
|
||||
'If you want to create a recursive relationship, '
|
||||
'use ForeignKey("self", symmetrical=False, through="%s").'
|
||||
) % relationship_model_name,
|
||||
obj=self,
|
||||
id='fields.E335',
|
||||
)
|
||||
@@ -1307,11 +1298,10 @@ class ManyToManyField(RelatedField):
|
||||
if seen_from == 0 or seen_to == 0:
|
||||
errors.append(
|
||||
checks.Error(
|
||||
("The model is used as an intermediate model by "
|
||||
"'%s', but it does not have a foreign key to '%s' or '%s'.") % (
|
||||
"The model is used as an intermediate model by "
|
||||
"'%s', but it does not have a foreign key to '%s' or '%s'." % (
|
||||
self, from_model_name, to_model_name
|
||||
),
|
||||
hint=None,
|
||||
obj=self.remote_field.through,
|
||||
id='fields.E336',
|
||||
)
|
||||
@@ -1325,12 +1315,10 @@ class ManyToManyField(RelatedField):
|
||||
self.remote_field.through_fields[0] and self.remote_field.through_fields[1]):
|
||||
errors.append(
|
||||
checks.Error(
|
||||
("Field specifies 'through_fields' but does not "
|
||||
"provide the names of the two link fields that should be "
|
||||
"used for the relation through model "
|
||||
"'%s'.") % qualified_model_name,
|
||||
hint=("Make sure you specify 'through_fields' as "
|
||||
"through_fields=('field1', 'field2')"),
|
||||
"Field specifies 'through_fields' but does not provide "
|
||||
"the names of the two link fields that should be used "
|
||||
"for the relation through model '%s'." % qualified_model_name,
|
||||
hint="Make sure you specify 'through_fields' as through_fields=('field1', 'field2')",
|
||||
obj=self,
|
||||
id='fields.E337',
|
||||
)
|
||||
@@ -1357,9 +1345,10 @@ class ManyToManyField(RelatedField):
|
||||
if hasattr(f, 'remote_field') and getattr(f.remote_field, 'model', None) == related_model:
|
||||
possible_field_names.append(f.name)
|
||||
if possible_field_names:
|
||||
hint = ("Did you mean one of the following foreign "
|
||||
"keys to '%s': %s?") % (related_model._meta.object_name,
|
||||
', '.join(possible_field_names))
|
||||
hint = "Did you mean one of the following foreign keys to '%s': %s?" % (
|
||||
related_model._meta.object_name,
|
||||
', '.join(possible_field_names),
|
||||
)
|
||||
else:
|
||||
hint = None
|
||||
|
||||
@@ -1368,8 +1357,8 @@ class ManyToManyField(RelatedField):
|
||||
except exceptions.FieldDoesNotExist:
|
||||
errors.append(
|
||||
checks.Error(
|
||||
("The intermediary model '%s' has no field '%s'.") % (
|
||||
qualified_model_name, field_name),
|
||||
"The intermediary model '%s' has no field '%s'."
|
||||
% (qualified_model_name, field_name),
|
||||
hint=hint,
|
||||
obj=self,
|
||||
id='fields.E338',
|
||||
@@ -1382,7 +1371,8 @@ class ManyToManyField(RelatedField):
|
||||
checks.Error(
|
||||
"'%s.%s' is not a foreign key to '%s'." % (
|
||||
through._meta.object_name, field_name,
|
||||
related_model._meta.object_name),
|
||||
related_model._meta.object_name,
|
||||
),
|
||||
hint=hint,
|
||||
obj=self,
|
||||
id='fields.E339',
|
||||
|
||||
Reference in New Issue
Block a user