Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

[1.6.x] Fixed #20820 -- Model inheritance + m2m fixture loading regre…

…ssion

Tests by Tim Graham, report from jeroen.pulles@redslider.net.

Backport of 1ed77e7 from master
  • Loading branch information...
commit 2b1101a4a6acbf9350b62638a04edcf20ad83e97 1 parent 3ae585b
@akaariai akaariai authored
View
11 django/db/models/fields/related.py
@@ -989,7 +989,16 @@ def get_foreign_related_value(self, instance):
@staticmethod
def get_instance_value_for_fields(instance, fields):
- return tuple([getattr(instance, field.attname) for field in fields])
+ ret = []
+ 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.
+ if field.primary_key:
+ ret.append(instance.pk)
+ else:
+ ret.append(getattr(instance, field.attname))
+ return tuple(ret)
def get_attname_column(self):
attname, column = super(ForeignObject, self).get_attname_column()
View
10 tests/fixtures_regress/fixtures/special-article.json
@@ -0,0 +1,10 @@
+[
+ {
+ "pk": 1,
+ "model": "fixtures_regress.specialarticle",
+ "fields": {
+ "title": "Article Title 1",
+ "channels": []
+ }
+ }
+]
View
5 tests/fixtures_regress/models.py
@@ -70,6 +70,11 @@ class Meta:
ordering = ('id',)
+# Subclass of a model with a ManyToManyField for test_ticket_20820
+class SpecialArticle(Article):
+ pass
+
+
# Models to regression test #11428
@python_2_unicode_compatible
class Widget(models.Model):
View
11 tests/fixtures_regress/tests.py
@@ -431,6 +431,17 @@ def test_loaddata_not_existant_fixture_file(self):
self.assertTrue("No fixture 'this_fixture_doesnt_exist' in" in
force_text(stdout_output.getvalue()))
+ def test_ticket_20820(self):
+ """
+ Regression for ticket #20820 -- loaddata on a model that inherits
+ from a model with a M2M shouldn't blow up.
+ """
+ management.call_command(
+ 'loaddata',
+ 'special-article.json',
+ verbosity=0,
+ )
+
class NaturalKeyFixtureTests(TestCase):
Please sign in to comment.
Something went wrong with that request. Please try again.