From 60f795c0608119cdb02d61d3eb59f34ebdb55754 Mon Sep 17 00:00:00 2001 From: Kai Richard Koenig Date: Wed, 1 Jul 2015 09:21:17 +0200 Subject: [PATCH] Fixed #25040 -- Fixed migrations state crash with GenericForeignKey --- django/db/migrations/state.py | 2 +- tests/migrations/test_state.py | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/django/db/migrations/state.py b/django/db/migrations/state.py index c865f139d7..560d0014c8 100644 --- a/django/db/migrations/state.py +++ b/django/db/migrations/state.py @@ -43,7 +43,7 @@ def get_related_models_recursive(model): def _related_models(m): return [ f.related_model for f in m._meta.get_fields(include_parents=True, include_hidden=True) - if f.is_relation and not isinstance(f.related_model, six.string_types) + if f.is_relation and f.related_model is not None and not isinstance(f.related_model, six.string_types) ] + [ subclass for subclass in m.__subclasses__() if issubclass(subclass, models.Model) diff --git a/tests/migrations/test_state.py b/tests/migrations/test_state.py index 7a959c53eb..0189d35d82 100644 --- a/tests/migrations/test_state.py +++ b/tests/migrations/test_state.py @@ -1,4 +1,5 @@ from django.apps.registry import Apps +from django.contrib.contenttypes.fields import GenericForeignKey from django.db import models from django.db.migrations.exceptions import InvalidBasesError from django.db.migrations.operations import ( @@ -1049,6 +1050,12 @@ class RelatedModelsTests(SimpleTestCase): self.assertRelated(S, [A, B, T]) self.assertRelated(T, [A, B, S]) + def test_generic_fk(self): + A = self.create_model("A", foreign_keys=[models.ForeignKey('B'), GenericForeignKey()]) + B = self.create_model("B", foreign_keys=[models.ForeignKey('C')]) + self.assertRelated(A, [B]) + self.assertRelated(B, [A]) + def test_abstract_base(self): A = self.create_model("A", abstract=True) B = self.create_model("B", bases=(A,))