Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Merge pull request #2679 from ramiro/t22421

Fixed #22421 -- Regression in fixtures loading.
  • Loading branch information...
commit d731f48ecea6ceeabc2b015b48655a9f9428a730 2 parents 64ee097 + 862e1ff
@ramiro ramiro authored
View
6 django/db/models/fields/related.py
@@ -1440,14 +1440,16 @@ def get_foreign_related_value(self, instance):
@staticmethod
def get_instance_value_for_fields(instance, fields):
ret = []
+ opts = instance._meta
for field in fields:
# Gotcha: in some cases (like fixture loading) a model can have
# different values in parent_ptr_id and parent's id. So, use
# instance.pk (that is, parent_ptr_id) when asked for instance.id.
- opts = instance._meta
if field.primary_key:
possible_parent_link = opts.get_ancestor_link(field.model)
- if not possible_parent_link or possible_parent_link.primary_key:
+ if (not possible_parent_link or
+ possible_parent_link.primary_key or
+ possible_parent_link.model._meta.abstract):
ret.append(instance.pk)
continue
ret.append(getattr(instance, field.attname))
View
17 tests/fixtures_regress/fixtures/feature.json
@@ -0,0 +1,17 @@
+[
+{
+ "fields": {
+ "channels": [],
+ "title": "Title of this feature article"
+ },
+ "model": "fixtures_regress.article",
+ "pk": 1
+},
+{
+ "fields": {
+ "channels": []
+ },
+ "model": "fixtures_regress.feature",
+ "pk": 1
+}
+]
View
13 tests/fixtures_regress/models.py
@@ -52,7 +52,7 @@ class Child(Parent):
data = models.CharField(max_length=10)
-# Models to regression test #7572
+# Models to regression test #7572, #20820
class Channel(models.Model):
name = models.CharField(max_length=255)
@@ -70,6 +70,17 @@ class SpecialArticle(Article):
pass
+# Models to regression test #22421
+class CommonFeature(Article):
+
+ class Meta:
+ abstract = True
+
+
+class Feature(CommonFeature):
+ pass
+
+
# Models to regression test #11428
@python_2_unicode_compatible
class Widget(models.Model):
View
12 tests/fixtures_regress/tests.py
@@ -486,6 +486,18 @@ def test_ticket_20820(self):
verbosity=0,
)
+ def test_ticket_22421(self):
+ """
+ Regression for ticket #22421 -- loaddata on a model that inherits from
+ a grand-parent model with a M2M but via an abstract parent shouldn't
+ blow up.
+ """
+ management.call_command(
+ 'loaddata',
+ 'feature.json',
+ verbosity=0,
+ )
+
class NaturalKeyFixtureTests(TestCase):

0 comments on commit d731f48

Please sign in to comment.
Something went wrong with that request. Please try again.