mirror of https://github.com/django/django.git
[1.6.x] Fixed #20820 -- Model inheritance + m2m fixture loading regression
Tests by Tim Graham, report from jeroen.pulles@redslider.net.
Backport of 1ed77e7782
from master
This commit is contained in:
parent
3ae585b449
commit
2b1101a4a6
|
@ -989,7 +989,16 @@ class ForeignObject(RelatedField):
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_instance_value_for_fields(instance, fields):
|
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):
|
def get_attname_column(self):
|
||||||
attname, column = super(ForeignObject, self).get_attname_column()
|
attname, column = super(ForeignObject, self).get_attname_column()
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"pk": 1,
|
||||||
|
"model": "fixtures_regress.specialarticle",
|
||||||
|
"fields": {
|
||||||
|
"title": "Article Title 1",
|
||||||
|
"channels": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
|
@ -70,6 +70,11 @@ class Article(models.Model):
|
||||||
ordering = ('id',)
|
ordering = ('id',)
|
||||||
|
|
||||||
|
|
||||||
|
# Subclass of a model with a ManyToManyField for test_ticket_20820
|
||||||
|
class SpecialArticle(Article):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
# Models to regression test #11428
|
# Models to regression test #11428
|
||||||
@python_2_unicode_compatible
|
@python_2_unicode_compatible
|
||||||
class Widget(models.Model):
|
class Widget(models.Model):
|
||||||
|
|
|
@ -431,6 +431,17 @@ class TestFixtures(TestCase):
|
||||||
self.assertTrue("No fixture 'this_fixture_doesnt_exist' in" in
|
self.assertTrue("No fixture 'this_fixture_doesnt_exist' in" in
|
||||||
force_text(stdout_output.getvalue()))
|
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):
|
class NaturalKeyFixtureTests(TestCase):
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue