summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKai Richard Koenig <kai.richard.koenig@googlemail.com>2015-07-01 09:21:17 +0200
committerTim Graham <timograham@gmail.com>2015-07-02 12:48:29 -0400
commit60f795c0608119cdb02d61d3eb59f34ebdb55754 (patch)
tree2facf2d7d0f28bf998975bba409a782ff04194cf
parent11cac1bd8ef7546ca32d9969d4348bf412dc6664 (diff)
Fixed #25040 -- Fixed migrations state crash with GenericForeignKey
-rw-r--r--django/db/migrations/state.py2
-rw-r--r--tests/migrations/test_state.py7
2 files changed, 8 insertions, 1 deletions
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,))