Loading django/contrib/contenttypes/fields.py +6 −6 Original line number Diff line number Diff line Loading @@ -67,7 +67,7 @@ class GenericForeignKey(six.with_metaclass(RenameGenericForeignKeyMethods)): 'Field names must not end with an underscore.', hint=None, obj=self, id='contenttypes.E001', id='fields.E001', ) ] else: Loading @@ -82,7 +82,7 @@ class GenericForeignKey(six.with_metaclass(RenameGenericForeignKeyMethods)): "The GenericForeignKey object ID references the non-existent field '%s'." % self.fk_field, hint=None, obj=self, id='contenttypes.E002', id='contenttypes.E001', ) ] else: Loading @@ -102,7 +102,7 @@ class GenericForeignKey(six.with_metaclass(RenameGenericForeignKeyMethods)): ), hint=None, obj=self, id='contenttypes.E003', id='contenttypes.E002', ) ] else: Loading @@ -114,7 +114,7 @@ class GenericForeignKey(six.with_metaclass(RenameGenericForeignKeyMethods)): ), hint="GenericForeignKeys must use a ForeignKey to 'contenttypes.ContentType' as the 'content_type' field.", obj=self, id='contenttypes.E004', id='contenttypes.E003', ) ] elif field.rel.to != ContentType: Loading @@ -125,7 +125,7 @@ class GenericForeignKey(six.with_metaclass(RenameGenericForeignKeyMethods)): ), hint="GenericForeignKeys must use a ForeignKey to 'contenttypes.ContentType' as the 'content_type' field.", obj=self, id='contenttypes.E005', id='contenttypes.E004', ) ] else: Loading Loading @@ -282,7 +282,7 @@ class GenericRelation(ForeignObject): return [] else: return [ checks.Warning( checks.Error( ("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 Loading django/db/models/base.py +47 −51 Original line number Diff line number Diff line Loading @@ -1078,26 +1078,22 @@ class Model(six.with_metaclass(ModelBase)): except ValueError: errors.append( checks.Error( '"%s" is not of the form "app_label.app_name".' % cls._meta.swappable, "'%s' is not of the form 'app_label.app_name'." % cls._meta.swappable, hint=None, obj=cls, id='E002', obj=None, id='models.E001', ) ) except LookupError: app_label, model_name = cls._meta.swapped.split('.') errors.append( checks.Error( ('The model has been swapped out for %s.%s ' 'which has not been installed or is abstract.') % ( app_label, model_name ("'%s' references '%s.%s', which has not been installed, or is abstract.") % ( cls._meta.swappable, app_label, model_name ), hint=('Ensure that you did not misspell the model ' 'name and the app name as well as the model ' 'is not abstract. Does your INSTALLED_APPS ' 'setting contain the "%s" app?') % app_label, obj=cls, id='E003', hint=None, obj=None, id='models.E002', ) ) return errors Loading Loading @@ -1144,13 +1140,14 @@ class Model(six.with_metaclass(ModelBase)): if signature in seen_intermediary_signatures: errors.append( checks.Error( ('The model has two many-to-many relations through ' 'the intermediary %s model, which is not permitted.') % ( ("The model has two many-to-many relations through " "the intermediate model '%s.%s'.") % ( f.rel.through._meta.app_label, f.rel.through._meta.object_name ), hint=None, obj=cls, id='E004', id='models.E003', ) ) else: Loading @@ -1167,13 +1164,11 @@ class Model(six.with_metaclass(ModelBase)): if fields and not fields[0].primary_key and cls._meta.pk.name == 'id': return [ checks.Error( ('You cannot use "id" as a field name, because each model ' 'automatically gets an "id" field if none ' 'of the fields have primary_key=True.'), hint=('Remove or rename "id" field ' 'or add primary_key=True to a field.'), ("'id' can only be used as a field name if the field also " "sets 'primary_key=True'."), hint=None, obj=cls, id='E005', id='models.E004', ) ] else: Loading @@ -1193,15 +1188,15 @@ class Model(six.with_metaclass(ModelBase)): if clash: errors.append( checks.Error( ('The field "%s" from parent model ' '%s clashes with the field "%s" ' 'from parent model %s.') % ( ("The field '%s' from parent model " "'%s' clashes with the field '%s' " "from parent model '%s'.") % ( clash.name, clash.model._meta, f.name, f.model._meta ), hint=None, obj=cls, id='E053', id='models.E005', ) ) used_fields[f.name] = f Loading @@ -1220,13 +1215,13 @@ class Model(six.with_metaclass(ModelBase)): if clash and not id_conflict: errors.append( checks.Error( ('The field clashes with the field "%s" ' 'from model %s.') % ( clash.name, clash.model._meta ("The field '%s' clashes with the field '%s' " "from model '%s'.") % ( f.name, clash.name, clash.model._meta ), hint=None, obj=f, id='E054', id='models.E006', ) ) used_fields[f.name] = f Loading @@ -1247,9 +1242,10 @@ class Model(six.with_metaclass(ModelBase)): if column_name and column_name in used_column_names: errors.append( checks.Error( 'Field "%s" has column name "%s" that is already used.' % (f.name, column_name), hint=None, "Field '%s' has column name '%s' that is used by another field." % (f.name, column_name), hint="Specify a 'db_column' for the field.", obj=cls, id='models.E007' ) ) else: Loading @@ -1263,10 +1259,10 @@ class Model(six.with_metaclass(ModelBase)): if not isinstance(cls._meta.index_together, (tuple, list)): return [ checks.Error( '"index_together" must be a list or tuple.', "'index_together' must be a list or tuple.", hint=None, obj=cls, id='E006', id='models.E008', ) ] Loading @@ -1274,10 +1270,10 @@ class Model(six.with_metaclass(ModelBase)): for fields in cls._meta.index_together): return [ checks.Error( 'All "index_together" elements must be lists or tuples.', "All 'index_together' elements must be lists or tuples.", hint=None, obj=cls, id='E007', id='models.E009', ) ] Loading @@ -1293,10 +1289,10 @@ class Model(six.with_metaclass(ModelBase)): if not isinstance(cls._meta.unique_together, (tuple, list)): return [ checks.Error( '"unique_together" must be a list or tuple.', "'unique_together' must be a list or tuple.", hint=None, obj=cls, id='E008', id='models.E010', ) ] Loading @@ -1304,10 +1300,10 @@ class Model(six.with_metaclass(ModelBase)): for fields in cls._meta.unique_together): return [ checks.Error( 'All "unique_together" elements must be lists or tuples.', "All 'unique_together' elements must be lists or tuples.", hint=None, obj=cls, id='E009', id='models.E011', ) ] Loading @@ -1329,23 +1325,23 @@ class Model(six.with_metaclass(ModelBase)): except models.FieldDoesNotExist: errors.append( checks.Error( '"%s" points to a missing field named "%s".' % (option, field_name), hint='Ensure that you did not misspell the field name.', "'%s' refers to the non-existent field '%s'." % (option, field_name), hint=None, obj=cls, id='E010', id='models.E012', ) ) else: if isinstance(field.rel, models.ManyToManyRel): errors.append( checks.Error( ('"%s" refers to a m2m "%s" field, but ' 'ManyToManyFields are not supported in "%s".') % ( ("'%s' refers to a ManyToManyField '%s', but " "ManyToManyFields are not permitted in '%s'.") % ( option, field_name, option ), hint=None, obj=cls, id='E011', id='models.E013', ) ) return errors Loading @@ -1363,11 +1359,11 @@ 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).'), ("'ordering' must be a tuple or list " "(even if you want to order by only one field)."), hint=None, obj=cls, id='E012', id='models.E014', ) ] Loading Loading @@ -1398,10 +1394,10 @@ class Model(six.with_metaclass(ModelBase)): except FieldDoesNotExist: errors.append( checks.Error( '"ordering" pointing to a missing "%s" field.' % field_name, hint='Ensure that you did not misspell the field name.', "'ordering' refers to the non-existent field '%s'." % field_name, hint=None, obj=cls, id='E013', id='models.E015', ) ) return errors Loading tests/contenttypes_tests/tests.py +6 −6 Original line number Diff line number Diff line Loading @@ -109,7 +109,7 @@ class GenericForeignKeyTests(IsolatedModelsTestCase): "The GenericForeignKey content type references the non-existent field 'TaggedItem.content_type'.", hint=None, obj=TaggedItem.content_object, id='contenttypes.E003', id='contenttypes.E002', ) ] self.assertEqual(errors, expected) Loading @@ -127,7 +127,7 @@ class GenericForeignKeyTests(IsolatedModelsTestCase): "'Model.content_type' is not a ForeignKey.", hint="GenericForeignKeys must use a ForeignKey to 'contenttypes.ContentType' as the 'content_type' field.", obj=Model.content_object, id='contenttypes.E004', id='contenttypes.E003', ) ] self.assertEqual(errors, expected) Loading @@ -145,7 +145,7 @@ class GenericForeignKeyTests(IsolatedModelsTestCase): "'Model.content_type' is not a ForeignKey to 'contenttypes.ContentType'.", hint="GenericForeignKeys must use a ForeignKey to 'contenttypes.ContentType' as the 'content_type' field.", obj=Model.content_object, id='contenttypes.E005', id='contenttypes.E004', ) ] self.assertEqual(errors, expected) Loading @@ -162,7 +162,7 @@ class GenericForeignKeyTests(IsolatedModelsTestCase): "The GenericForeignKey object ID references the non-existent field 'object_id'.", hint=None, obj=TaggedItem.content_object, id='contenttypes.E002', id='contenttypes.E001', ) ] self.assertEqual(errors, expected) Loading @@ -180,7 +180,7 @@ class GenericForeignKeyTests(IsolatedModelsTestCase): 'Field names must not end with an underscore.', hint=None, obj=Model.content_object_, id='contenttypes.E001', id='fields.E001', ) ] self.assertEqual(errors, expected) Loading Loading @@ -265,7 +265,7 @@ class GenericRelationshipTests(IsolatedModelsTestCase): errors = Bookmark.tags.field.check() expected = [ checks.Warning( checks.Error( ("The GenericRelation defines a relation with the model " "'contenttypes_tests.TaggedItem', but that model does not have a " "GenericForeignKey."), Loading tests/invalid_models_tests/test_models.py +58 −62 Original line number Diff line number Diff line Loading @@ -18,10 +18,10 @@ class IndexTogetherTests(IsolatedModelsTestCase): errors = Model.check() expected = [ Error( '"index_together" must be a list or tuple.', "'index_together' must be a list or tuple.", hint=None, obj=Model, id='E006', id='models.E008', ), ] self.assertEqual(errors, expected) Loading @@ -34,10 +34,10 @@ class IndexTogetherTests(IsolatedModelsTestCase): errors = Model.check() expected = [ Error( '"index_together" must be a list or tuple.', "'index_together' must be a list or tuple.", hint=None, obj=Model, id='E006', id='models.E008', ), ] self.assertEqual(errors, expected) Loading @@ -50,10 +50,10 @@ class IndexTogetherTests(IsolatedModelsTestCase): errors = Model.check() expected = [ Error( 'All "index_together" elements must be lists or tuples.', "All 'index_together' elements must be lists or tuples.", hint=None, obj=Model, id='E007', id='models.E009', ), ] self.assertEqual(errors, expected) Loading @@ -68,10 +68,10 @@ class IndexTogetherTests(IsolatedModelsTestCase): errors = Model.check() expected = [ Error( '"index_together" points to a missing field named "missing_field".', hint='Ensure that you did not misspell the field name.', "'index_together' refers to the non-existent field 'missing_field'.", hint=None, obj=Model, id='E010', id='models.E012', ), ] self.assertEqual(errors, expected) Loading @@ -88,11 +88,11 @@ class IndexTogetherTests(IsolatedModelsTestCase): errors = Model.check() expected = [ Error( ('"index_together" refers to a m2m "m2m" field, but ' 'ManyToManyFields are not supported in "index_together".'), ("'index_together' refers to a ManyToManyField 'm2m', but " "ManyToManyFields are not permitted in 'index_together'."), hint=None, obj=Model, id='E011', id='models.E013', ), ] self.assertEqual(errors, expected) Loading @@ -109,10 +109,10 @@ class UniqueTogetherTests(IsolatedModelsTestCase): errors = Model.check() expected = [ Error( '"unique_together" must be a list or tuple.', "'unique_together' must be a list or tuple.", hint=None, obj=Model, id='E008', id='models.E010', ), ] self.assertEqual(errors, expected) Loading @@ -128,10 +128,10 @@ class UniqueTogetherTests(IsolatedModelsTestCase): errors = Model.check() expected = [ Error( 'All "unique_together" elements must be lists or tuples.', "All 'unique_together' elements must be lists or tuples.", hint=None, obj=Model, id='E009', id='models.E011', ), ] self.assertEqual(errors, expected) Loading @@ -144,10 +144,10 @@ class UniqueTogetherTests(IsolatedModelsTestCase): errors = Model.check() expected = [ Error( '"unique_together" must be a list or tuple.', "'unique_together' must be a list or tuple.", hint=None, obj=Model, id='E008', id='models.E010', ), ] self.assertEqual(errors, expected) Loading @@ -174,10 +174,10 @@ class UniqueTogetherTests(IsolatedModelsTestCase): errors = Model.check() expected = [ Error( '"unique_together" points to a missing field named "missing_field".', hint='Ensure that you did not misspell the field name.', "'unique_together' refers to the non-existent field 'missing_field'.", hint=None, obj=Model, id='E010', id='models.E012', ), ] self.assertEqual(errors, expected) Loading @@ -194,11 +194,11 @@ class UniqueTogetherTests(IsolatedModelsTestCase): errors = Model.check() expected = [ Error( ('"unique_together" refers to a m2m "m2m" field, but ' 'ManyToManyFields are not supported in "unique_together".'), ("'unique_together' refers to a ManyToManyField 'm2m', but " "ManyToManyFields are not permitted in 'unique_together'."), hint=None, obj=Model, id='E011', id='models.E013', ), ] self.assertEqual(errors, expected) Loading Loading @@ -276,20 +276,20 @@ class ShadowingFieldsTests(IsolatedModelsTestCase): errors = Child.check() expected = [ Error( ('The field "id" from parent model ' 'invalid_models_tests.mother clashes with the field "id" ' 'from parent model invalid_models_tests.father.'), ("The field 'id' from parent model " "'invalid_models_tests.mother' clashes with the field 'id' " "from parent model 'invalid_models_tests.father'."), hint=None, obj=Child, id='E053', id='models.E005', ), Error( ('The field "clash" from parent model ' 'invalid_models_tests.mother clashes with the field "clash" ' 'from parent model invalid_models_tests.father.'), ("The field 'clash' from parent model " "'invalid_models_tests.mother' clashes with the field 'clash' " "from parent model 'invalid_models_tests.father'."), hint=None, obj=Child, id='E053', id='models.E005', ) ] self.assertEqual(errors, expected) Loading @@ -309,11 +309,11 @@ class ShadowingFieldsTests(IsolatedModelsTestCase): errors = Child.check() expected = [ Error( ('The field clashes with the field "f_id" ' 'from model invalid_models_tests.parent.'), ("The field 'f' clashes with the field 'f_id' " "from model 'invalid_models_tests.parent'."), hint=None, obj=Child._meta.get_field('f'), id='E054', id='models.E006', ) ] self.assertEqual(errors, expected) Loading @@ -329,11 +329,11 @@ class ShadowingFieldsTests(IsolatedModelsTestCase): errors = Model.check() expected = [ Error( ('The field clashes with the field "fk" from model ' 'invalid_models_tests.model.'), ("The field 'fk_id' clashes with the field 'fk' from model " "'invalid_models_tests.model'."), hint=None, obj=Model._meta.get_field('fk_id'), id='E054', id='models.E006', ) ] self.assertEqual(errors, expected) Loading @@ -350,12 +350,10 @@ class OtherModelTests(IsolatedModelsTestCase): errors = Model.check() expected = [ Error( ('You cannot use "id" as a field name, because each model ' 'automatically gets an "id" field if none of the fields ' 'have primary_key=True.'), hint='Remove or rename "id" field or add primary_key=True to a field.', "'id' can only be used as a field name if the field also sets 'primary_key=True'.", hint=None, obj=Model, id='E005', id='models.E004', ), ] self.assertEqual(errors, expected) Loading @@ -368,11 +366,11 @@ class OtherModelTests(IsolatedModelsTestCase): errors = Model.check() expected = [ Error( ('"ordering" must be a tuple or list ' '(even if you want to order by only one field).'), ("'ordering' must be a tuple or list " "(even if you want to order by only one field)."), hint=None, obj=Model, id='E012', id='models.E014', ), ] self.assertEqual(errors, expected) Loading @@ -385,10 +383,10 @@ class OtherModelTests(IsolatedModelsTestCase): errors = Model.check() expected = [ Error( '"ordering" pointing to a missing "missing_field" field.', hint='Ensure that you did not misspell the field name.', "'ordering' refers to the non-existent field 'missing_field'.", hint=None, obj=Model, id='E013', id='models.E015', ) ] self.assertEqual(errors, expected) Loading @@ -402,10 +400,10 @@ class OtherModelTests(IsolatedModelsTestCase): errors = Model.check() expected = [ Error( '"TEST_SWAPPED_MODEL_BAD_VALUE" is not of the form "app_label.app_name".', "'TEST_SWAPPED_MODEL_BAD_VALUE' is not of the form 'app_label.app_name'.", hint=None, obj=Model, id='E002', obj=None, id='models.E001', ), ] self.assertEqual(errors, expected) Loading @@ -419,13 +417,11 @@ class OtherModelTests(IsolatedModelsTestCase): errors = Model.check() expected = [ Error( ('The model has been swapped out for not_an_app.Target ' 'which has not been installed or is abstract.'), hint=('Ensure that you did not misspell the model name and ' 'the app name as well as the model is not abstract. Does ' 'your INSTALLED_APPS setting contain the "not_an_app" app?'), obj=Model, id='E003', ("'TEST_SWAPPED_MODEL_BAD_MODEL' references 'not_an_app.Target', " 'which has not been installed, or is abstract.'), hint=None, obj=None, id='models.E002', ), ] self.assertEqual(errors, expected) Loading @@ -447,11 +443,11 @@ class OtherModelTests(IsolatedModelsTestCase): errors = Group.check() expected = [ Error( ('The model has two many-to-many relations through ' 'the intermediary Membership model, which is not permitted.'), ("The model has two many-to-many relations through " "the intermediate model 'invalid_models_tests.Membership'."), hint=None, obj=Group, id='E004', id='models.E003', ) ] self.assertEqual(errors, expected) Loading
django/contrib/contenttypes/fields.py +6 −6 Original line number Diff line number Diff line Loading @@ -67,7 +67,7 @@ class GenericForeignKey(six.with_metaclass(RenameGenericForeignKeyMethods)): 'Field names must not end with an underscore.', hint=None, obj=self, id='contenttypes.E001', id='fields.E001', ) ] else: Loading @@ -82,7 +82,7 @@ class GenericForeignKey(six.with_metaclass(RenameGenericForeignKeyMethods)): "The GenericForeignKey object ID references the non-existent field '%s'." % self.fk_field, hint=None, obj=self, id='contenttypes.E002', id='contenttypes.E001', ) ] else: Loading @@ -102,7 +102,7 @@ class GenericForeignKey(six.with_metaclass(RenameGenericForeignKeyMethods)): ), hint=None, obj=self, id='contenttypes.E003', id='contenttypes.E002', ) ] else: Loading @@ -114,7 +114,7 @@ class GenericForeignKey(six.with_metaclass(RenameGenericForeignKeyMethods)): ), hint="GenericForeignKeys must use a ForeignKey to 'contenttypes.ContentType' as the 'content_type' field.", obj=self, id='contenttypes.E004', id='contenttypes.E003', ) ] elif field.rel.to != ContentType: Loading @@ -125,7 +125,7 @@ class GenericForeignKey(six.with_metaclass(RenameGenericForeignKeyMethods)): ), hint="GenericForeignKeys must use a ForeignKey to 'contenttypes.ContentType' as the 'content_type' field.", obj=self, id='contenttypes.E005', id='contenttypes.E004', ) ] else: Loading Loading @@ -282,7 +282,7 @@ class GenericRelation(ForeignObject): return [] else: return [ checks.Warning( checks.Error( ("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 Loading
django/db/models/base.py +47 −51 Original line number Diff line number Diff line Loading @@ -1078,26 +1078,22 @@ class Model(six.with_metaclass(ModelBase)): except ValueError: errors.append( checks.Error( '"%s" is not of the form "app_label.app_name".' % cls._meta.swappable, "'%s' is not of the form 'app_label.app_name'." % cls._meta.swappable, hint=None, obj=cls, id='E002', obj=None, id='models.E001', ) ) except LookupError: app_label, model_name = cls._meta.swapped.split('.') errors.append( checks.Error( ('The model has been swapped out for %s.%s ' 'which has not been installed or is abstract.') % ( app_label, model_name ("'%s' references '%s.%s', which has not been installed, or is abstract.") % ( cls._meta.swappable, app_label, model_name ), hint=('Ensure that you did not misspell the model ' 'name and the app name as well as the model ' 'is not abstract. Does your INSTALLED_APPS ' 'setting contain the "%s" app?') % app_label, obj=cls, id='E003', hint=None, obj=None, id='models.E002', ) ) return errors Loading Loading @@ -1144,13 +1140,14 @@ class Model(six.with_metaclass(ModelBase)): if signature in seen_intermediary_signatures: errors.append( checks.Error( ('The model has two many-to-many relations through ' 'the intermediary %s model, which is not permitted.') % ( ("The model has two many-to-many relations through " "the intermediate model '%s.%s'.") % ( f.rel.through._meta.app_label, f.rel.through._meta.object_name ), hint=None, obj=cls, id='E004', id='models.E003', ) ) else: Loading @@ -1167,13 +1164,11 @@ class Model(six.with_metaclass(ModelBase)): if fields and not fields[0].primary_key and cls._meta.pk.name == 'id': return [ checks.Error( ('You cannot use "id" as a field name, because each model ' 'automatically gets an "id" field if none ' 'of the fields have primary_key=True.'), hint=('Remove or rename "id" field ' 'or add primary_key=True to a field.'), ("'id' can only be used as a field name if the field also " "sets 'primary_key=True'."), hint=None, obj=cls, id='E005', id='models.E004', ) ] else: Loading @@ -1193,15 +1188,15 @@ class Model(six.with_metaclass(ModelBase)): if clash: errors.append( checks.Error( ('The field "%s" from parent model ' '%s clashes with the field "%s" ' 'from parent model %s.') % ( ("The field '%s' from parent model " "'%s' clashes with the field '%s' " "from parent model '%s'.") % ( clash.name, clash.model._meta, f.name, f.model._meta ), hint=None, obj=cls, id='E053', id='models.E005', ) ) used_fields[f.name] = f Loading @@ -1220,13 +1215,13 @@ class Model(six.with_metaclass(ModelBase)): if clash and not id_conflict: errors.append( checks.Error( ('The field clashes with the field "%s" ' 'from model %s.') % ( clash.name, clash.model._meta ("The field '%s' clashes with the field '%s' " "from model '%s'.") % ( f.name, clash.name, clash.model._meta ), hint=None, obj=f, id='E054', id='models.E006', ) ) used_fields[f.name] = f Loading @@ -1247,9 +1242,10 @@ class Model(six.with_metaclass(ModelBase)): if column_name and column_name in used_column_names: errors.append( checks.Error( 'Field "%s" has column name "%s" that is already used.' % (f.name, column_name), hint=None, "Field '%s' has column name '%s' that is used by another field." % (f.name, column_name), hint="Specify a 'db_column' for the field.", obj=cls, id='models.E007' ) ) else: Loading @@ -1263,10 +1259,10 @@ class Model(six.with_metaclass(ModelBase)): if not isinstance(cls._meta.index_together, (tuple, list)): return [ checks.Error( '"index_together" must be a list or tuple.', "'index_together' must be a list or tuple.", hint=None, obj=cls, id='E006', id='models.E008', ) ] Loading @@ -1274,10 +1270,10 @@ class Model(six.with_metaclass(ModelBase)): for fields in cls._meta.index_together): return [ checks.Error( 'All "index_together" elements must be lists or tuples.', "All 'index_together' elements must be lists or tuples.", hint=None, obj=cls, id='E007', id='models.E009', ) ] Loading @@ -1293,10 +1289,10 @@ class Model(six.with_metaclass(ModelBase)): if not isinstance(cls._meta.unique_together, (tuple, list)): return [ checks.Error( '"unique_together" must be a list or tuple.', "'unique_together' must be a list or tuple.", hint=None, obj=cls, id='E008', id='models.E010', ) ] Loading @@ -1304,10 +1300,10 @@ class Model(six.with_metaclass(ModelBase)): for fields in cls._meta.unique_together): return [ checks.Error( 'All "unique_together" elements must be lists or tuples.', "All 'unique_together' elements must be lists or tuples.", hint=None, obj=cls, id='E009', id='models.E011', ) ] Loading @@ -1329,23 +1325,23 @@ class Model(six.with_metaclass(ModelBase)): except models.FieldDoesNotExist: errors.append( checks.Error( '"%s" points to a missing field named "%s".' % (option, field_name), hint='Ensure that you did not misspell the field name.', "'%s' refers to the non-existent field '%s'." % (option, field_name), hint=None, obj=cls, id='E010', id='models.E012', ) ) else: if isinstance(field.rel, models.ManyToManyRel): errors.append( checks.Error( ('"%s" refers to a m2m "%s" field, but ' 'ManyToManyFields are not supported in "%s".') % ( ("'%s' refers to a ManyToManyField '%s', but " "ManyToManyFields are not permitted in '%s'.") % ( option, field_name, option ), hint=None, obj=cls, id='E011', id='models.E013', ) ) return errors Loading @@ -1363,11 +1359,11 @@ 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).'), ("'ordering' must be a tuple or list " "(even if you want to order by only one field)."), hint=None, obj=cls, id='E012', id='models.E014', ) ] Loading Loading @@ -1398,10 +1394,10 @@ class Model(six.with_metaclass(ModelBase)): except FieldDoesNotExist: errors.append( checks.Error( '"ordering" pointing to a missing "%s" field.' % field_name, hint='Ensure that you did not misspell the field name.', "'ordering' refers to the non-existent field '%s'." % field_name, hint=None, obj=cls, id='E013', id='models.E015', ) ) return errors Loading
tests/contenttypes_tests/tests.py +6 −6 Original line number Diff line number Diff line Loading @@ -109,7 +109,7 @@ class GenericForeignKeyTests(IsolatedModelsTestCase): "The GenericForeignKey content type references the non-existent field 'TaggedItem.content_type'.", hint=None, obj=TaggedItem.content_object, id='contenttypes.E003', id='contenttypes.E002', ) ] self.assertEqual(errors, expected) Loading @@ -127,7 +127,7 @@ class GenericForeignKeyTests(IsolatedModelsTestCase): "'Model.content_type' is not a ForeignKey.", hint="GenericForeignKeys must use a ForeignKey to 'contenttypes.ContentType' as the 'content_type' field.", obj=Model.content_object, id='contenttypes.E004', id='contenttypes.E003', ) ] self.assertEqual(errors, expected) Loading @@ -145,7 +145,7 @@ class GenericForeignKeyTests(IsolatedModelsTestCase): "'Model.content_type' is not a ForeignKey to 'contenttypes.ContentType'.", hint="GenericForeignKeys must use a ForeignKey to 'contenttypes.ContentType' as the 'content_type' field.", obj=Model.content_object, id='contenttypes.E005', id='contenttypes.E004', ) ] self.assertEqual(errors, expected) Loading @@ -162,7 +162,7 @@ class GenericForeignKeyTests(IsolatedModelsTestCase): "The GenericForeignKey object ID references the non-existent field 'object_id'.", hint=None, obj=TaggedItem.content_object, id='contenttypes.E002', id='contenttypes.E001', ) ] self.assertEqual(errors, expected) Loading @@ -180,7 +180,7 @@ class GenericForeignKeyTests(IsolatedModelsTestCase): 'Field names must not end with an underscore.', hint=None, obj=Model.content_object_, id='contenttypes.E001', id='fields.E001', ) ] self.assertEqual(errors, expected) Loading Loading @@ -265,7 +265,7 @@ class GenericRelationshipTests(IsolatedModelsTestCase): errors = Bookmark.tags.field.check() expected = [ checks.Warning( checks.Error( ("The GenericRelation defines a relation with the model " "'contenttypes_tests.TaggedItem', but that model does not have a " "GenericForeignKey."), Loading
tests/invalid_models_tests/test_models.py +58 −62 Original line number Diff line number Diff line Loading @@ -18,10 +18,10 @@ class IndexTogetherTests(IsolatedModelsTestCase): errors = Model.check() expected = [ Error( '"index_together" must be a list or tuple.', "'index_together' must be a list or tuple.", hint=None, obj=Model, id='E006', id='models.E008', ), ] self.assertEqual(errors, expected) Loading @@ -34,10 +34,10 @@ class IndexTogetherTests(IsolatedModelsTestCase): errors = Model.check() expected = [ Error( '"index_together" must be a list or tuple.', "'index_together' must be a list or tuple.", hint=None, obj=Model, id='E006', id='models.E008', ), ] self.assertEqual(errors, expected) Loading @@ -50,10 +50,10 @@ class IndexTogetherTests(IsolatedModelsTestCase): errors = Model.check() expected = [ Error( 'All "index_together" elements must be lists or tuples.', "All 'index_together' elements must be lists or tuples.", hint=None, obj=Model, id='E007', id='models.E009', ), ] self.assertEqual(errors, expected) Loading @@ -68,10 +68,10 @@ class IndexTogetherTests(IsolatedModelsTestCase): errors = Model.check() expected = [ Error( '"index_together" points to a missing field named "missing_field".', hint='Ensure that you did not misspell the field name.', "'index_together' refers to the non-existent field 'missing_field'.", hint=None, obj=Model, id='E010', id='models.E012', ), ] self.assertEqual(errors, expected) Loading @@ -88,11 +88,11 @@ class IndexTogetherTests(IsolatedModelsTestCase): errors = Model.check() expected = [ Error( ('"index_together" refers to a m2m "m2m" field, but ' 'ManyToManyFields are not supported in "index_together".'), ("'index_together' refers to a ManyToManyField 'm2m', but " "ManyToManyFields are not permitted in 'index_together'."), hint=None, obj=Model, id='E011', id='models.E013', ), ] self.assertEqual(errors, expected) Loading @@ -109,10 +109,10 @@ class UniqueTogetherTests(IsolatedModelsTestCase): errors = Model.check() expected = [ Error( '"unique_together" must be a list or tuple.', "'unique_together' must be a list or tuple.", hint=None, obj=Model, id='E008', id='models.E010', ), ] self.assertEqual(errors, expected) Loading @@ -128,10 +128,10 @@ class UniqueTogetherTests(IsolatedModelsTestCase): errors = Model.check() expected = [ Error( 'All "unique_together" elements must be lists or tuples.', "All 'unique_together' elements must be lists or tuples.", hint=None, obj=Model, id='E009', id='models.E011', ), ] self.assertEqual(errors, expected) Loading @@ -144,10 +144,10 @@ class UniqueTogetherTests(IsolatedModelsTestCase): errors = Model.check() expected = [ Error( '"unique_together" must be a list or tuple.', "'unique_together' must be a list or tuple.", hint=None, obj=Model, id='E008', id='models.E010', ), ] self.assertEqual(errors, expected) Loading @@ -174,10 +174,10 @@ class UniqueTogetherTests(IsolatedModelsTestCase): errors = Model.check() expected = [ Error( '"unique_together" points to a missing field named "missing_field".', hint='Ensure that you did not misspell the field name.', "'unique_together' refers to the non-existent field 'missing_field'.", hint=None, obj=Model, id='E010', id='models.E012', ), ] self.assertEqual(errors, expected) Loading @@ -194,11 +194,11 @@ class UniqueTogetherTests(IsolatedModelsTestCase): errors = Model.check() expected = [ Error( ('"unique_together" refers to a m2m "m2m" field, but ' 'ManyToManyFields are not supported in "unique_together".'), ("'unique_together' refers to a ManyToManyField 'm2m', but " "ManyToManyFields are not permitted in 'unique_together'."), hint=None, obj=Model, id='E011', id='models.E013', ), ] self.assertEqual(errors, expected) Loading Loading @@ -276,20 +276,20 @@ class ShadowingFieldsTests(IsolatedModelsTestCase): errors = Child.check() expected = [ Error( ('The field "id" from parent model ' 'invalid_models_tests.mother clashes with the field "id" ' 'from parent model invalid_models_tests.father.'), ("The field 'id' from parent model " "'invalid_models_tests.mother' clashes with the field 'id' " "from parent model 'invalid_models_tests.father'."), hint=None, obj=Child, id='E053', id='models.E005', ), Error( ('The field "clash" from parent model ' 'invalid_models_tests.mother clashes with the field "clash" ' 'from parent model invalid_models_tests.father.'), ("The field 'clash' from parent model " "'invalid_models_tests.mother' clashes with the field 'clash' " "from parent model 'invalid_models_tests.father'."), hint=None, obj=Child, id='E053', id='models.E005', ) ] self.assertEqual(errors, expected) Loading @@ -309,11 +309,11 @@ class ShadowingFieldsTests(IsolatedModelsTestCase): errors = Child.check() expected = [ Error( ('The field clashes with the field "f_id" ' 'from model invalid_models_tests.parent.'), ("The field 'f' clashes with the field 'f_id' " "from model 'invalid_models_tests.parent'."), hint=None, obj=Child._meta.get_field('f'), id='E054', id='models.E006', ) ] self.assertEqual(errors, expected) Loading @@ -329,11 +329,11 @@ class ShadowingFieldsTests(IsolatedModelsTestCase): errors = Model.check() expected = [ Error( ('The field clashes with the field "fk" from model ' 'invalid_models_tests.model.'), ("The field 'fk_id' clashes with the field 'fk' from model " "'invalid_models_tests.model'."), hint=None, obj=Model._meta.get_field('fk_id'), id='E054', id='models.E006', ) ] self.assertEqual(errors, expected) Loading @@ -350,12 +350,10 @@ class OtherModelTests(IsolatedModelsTestCase): errors = Model.check() expected = [ Error( ('You cannot use "id" as a field name, because each model ' 'automatically gets an "id" field if none of the fields ' 'have primary_key=True.'), hint='Remove or rename "id" field or add primary_key=True to a field.', "'id' can only be used as a field name if the field also sets 'primary_key=True'.", hint=None, obj=Model, id='E005', id='models.E004', ), ] self.assertEqual(errors, expected) Loading @@ -368,11 +366,11 @@ class OtherModelTests(IsolatedModelsTestCase): errors = Model.check() expected = [ Error( ('"ordering" must be a tuple or list ' '(even if you want to order by only one field).'), ("'ordering' must be a tuple or list " "(even if you want to order by only one field)."), hint=None, obj=Model, id='E012', id='models.E014', ), ] self.assertEqual(errors, expected) Loading @@ -385,10 +383,10 @@ class OtherModelTests(IsolatedModelsTestCase): errors = Model.check() expected = [ Error( '"ordering" pointing to a missing "missing_field" field.', hint='Ensure that you did not misspell the field name.', "'ordering' refers to the non-existent field 'missing_field'.", hint=None, obj=Model, id='E013', id='models.E015', ) ] self.assertEqual(errors, expected) Loading @@ -402,10 +400,10 @@ class OtherModelTests(IsolatedModelsTestCase): errors = Model.check() expected = [ Error( '"TEST_SWAPPED_MODEL_BAD_VALUE" is not of the form "app_label.app_name".', "'TEST_SWAPPED_MODEL_BAD_VALUE' is not of the form 'app_label.app_name'.", hint=None, obj=Model, id='E002', obj=None, id='models.E001', ), ] self.assertEqual(errors, expected) Loading @@ -419,13 +417,11 @@ class OtherModelTests(IsolatedModelsTestCase): errors = Model.check() expected = [ Error( ('The model has been swapped out for not_an_app.Target ' 'which has not been installed or is abstract.'), hint=('Ensure that you did not misspell the model name and ' 'the app name as well as the model is not abstract. Does ' 'your INSTALLED_APPS setting contain the "not_an_app" app?'), obj=Model, id='E003', ("'TEST_SWAPPED_MODEL_BAD_MODEL' references 'not_an_app.Target', " 'which has not been installed, or is abstract.'), hint=None, obj=None, id='models.E002', ), ] self.assertEqual(errors, expected) Loading @@ -447,11 +443,11 @@ class OtherModelTests(IsolatedModelsTestCase): errors = Group.check() expected = [ Error( ('The model has two many-to-many relations through ' 'the intermediary Membership model, which is not permitted.'), ("The model has two many-to-many relations through " "the intermediate model 'invalid_models_tests.Membership'."), hint=None, obj=Group, id='E004', id='models.E003', ) ] self.assertEqual(errors, expected)