1
0
mirror of https://github.com/django/django.git synced 2024-12-23 01:25:58 +00:00

Merge pull request #2679 from ramiro/t22421

Fixed #22421 -- Regression in fixtures loading.
This commit is contained in:
Ramiro Morales 2014-05-21 18:57:46 -03:00
commit d731f48ece
4 changed files with 45 additions and 3 deletions

View File

@ -1440,14 +1440,16 @@ class ForeignObject(RelatedField):
@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 File

@ -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 File

@ -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 File

@ -486,6 +486,18 @@ class TestFixtures(TestCase):
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):