[1.10.x] Fixed #25292 -- Fixed crash in ManyToManyField.through_fields check.

Backport of baff4dd37d from master
This commit is contained in:
Andrew Nester 2016-06-30 14:22:10 +03:00 committed by Tim Graham
parent eb0e48e64a
commit f683bba6f6
2 changed files with 20 additions and 0 deletions

View File

@ -1685,6 +1685,10 @@ class Model(six.with_metaclass(ModelBase)):
) )
for f in cls._meta.local_many_to_many: 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 # Check if auto-generated name for the M2M field is too long
# for the database. # for the database.
for m2m in f.remote_field.through._meta.local_fields: for m2m in f.remote_field.through._meta.local_fields:

View File

@ -307,6 +307,22 @@ class RelativeFieldTests(SimpleTestCase):
] ]
self.assertEqual(errors, expected) 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') @isolate_apps('invalid_models_tests')
def test_many_to_many_through_isolate_apps_model(self): def test_many_to_many_through_isolate_apps_model(self):
""" """