Loading django/db/models/base.py +4 −0 Original line number Diff line number Diff line Loading @@ -1687,6 +1687,10 @@ class Model(six.with_metaclass(ModelBase)): ) for f in cls._meta.local_many_to_many: # Skip nonexistent models. if isinstance(f.remote_field.through, six.string_types): continue # Check if auto-generated name for the M2M field is too long # for the database. for m2m in f.remote_field.through._meta.local_fields: Loading tests/invalid_models_tests/test_relative_fields.py +16 −0 Original line number Diff line number Diff line Loading @@ -307,6 +307,22 @@ class RelativeFieldTests(SimpleTestCase): ] self.assertEqual(errors, expected) def test_missing_relationship_model_on_model_check(self): class Person(models.Model): pass class Group(models.Model): members = models.ManyToManyField('Person', through='MissingM2MModel') self.assertEqual(Group.check(), [ Error( "Field specifies a many-to-many relation through model " "'MissingM2MModel', which has not been installed.", obj=Group._meta.get_field('members'), id='fields.E331', ), ]) @isolate_apps('invalid_models_tests') def test_many_to_many_through_isolate_apps_model(self): """ Loading Loading
django/db/models/base.py +4 −0 Original line number Diff line number Diff line Loading @@ -1687,6 +1687,10 @@ class Model(six.with_metaclass(ModelBase)): ) for f in cls._meta.local_many_to_many: # Skip nonexistent models. if isinstance(f.remote_field.through, six.string_types): continue # Check if auto-generated name for the M2M field is too long # for the database. for m2m in f.remote_field.through._meta.local_fields: Loading
tests/invalid_models_tests/test_relative_fields.py +16 −0 Original line number Diff line number Diff line Loading @@ -307,6 +307,22 @@ class RelativeFieldTests(SimpleTestCase): ] self.assertEqual(errors, expected) def test_missing_relationship_model_on_model_check(self): class Person(models.Model): pass class Group(models.Model): members = models.ManyToManyField('Person', through='MissingM2MModel') self.assertEqual(Group.check(), [ Error( "Field specifies a many-to-many relation through model " "'MissingM2MModel', which has not been installed.", obj=Group._meta.get_field('members'), id='fields.E331', ), ]) @isolate_apps('invalid_models_tests') def test_many_to_many_through_isolate_apps_model(self): """ Loading