summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorAnssi Kääriäinen <akaariai@gmail.com>2013-08-20 16:23:25 +0300
committerAnssi Kääriäinen <akaariai@gmail.com>2013-08-20 17:15:52 +0300
commit2b1101a4a6acbf9350b62638a04edcf20ad83e97 (patch)
treeb26c1d1f7d1e1e593ee65deabd1c6b61513e342c /django
parent3ae585b44977d0753a5e5f142b790716d6939258 (diff)
[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
Diffstat (limited to 'django')
-rw-r--r--django/db/models/fields/related.py11
1 files changed, 10 insertions, 1 deletions
diff --git a/django/db/models/fields/related.py b/django/db/models/fields/related.py
index 5c13205fbb..2813a39567 100644
--- a/django/db/models/fields/related.py
+++ b/django/db/models/fields/related.py
@@ -989,7 +989,16 @@ class ForeignObject(RelatedField):
@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()