summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnssi Kääriäinen <akaariai@gmail.com>2013-03-24 20:57:02 +0200
committerAnssi Kääriäinen <akaariai@gmail.com>2013-03-24 20:59:56 +0200
commit0e0eb8a9553bb89347ceb159537ccc417cb5e7f5 (patch)
tree0b49220bda878a3bf3d5db26d9fd26ab008a2400
parent014638a1311dfc64e6f6eed28f12eeb227926150 (diff)
Fixed field.rel.field_name handling
This is a regression fix to multicolumn joins. Refs #19385.
-rw-r--r--django/db/models/fields/related.py14
1 files changed, 14 insertions, 0 deletions
diff --git a/django/db/models/fields/related.py b/django/db/models/fields/related.py
index 5b2f35bb08..b575583ebc 100644
--- a/django/db/models/fields/related.py
+++ b/django/db/models/fields/related.py
@@ -126,6 +126,7 @@ class RelatedField(Field):
self.name = self.name or (self.rel.to._meta.model_name + '_' + self.rel.to._meta.pk.name)
if self.verbose_name is None:
self.verbose_name = self.rel.to._meta.verbose_name
+ self.rel.set_field_name()
def do_related_class(self, other, cls):
self.set_attributes_from_rel()
@@ -863,6 +864,16 @@ class ForeignObjectRel(object):
def get_extra_restriction(self, where_class, alias, related_alias):
return self.field.get_extra_restriction(where_class, related_alias, alias)
+ def set_field_name(self):
+ """
+ Sets the related field's name, this is not available until later stages
+ of app loading, so set_field_name is called from
+ set_attributes_from_rel()
+ """
+ # By default foreign object doesn't relate to any remote field (for
+ # example custom multicolumn joins currently have no remote field).
+ self.field_name = None
+
class ManyToOneRel(ForeignObjectRel):
def __init__(self, field, to, field_name, related_name=None, limit_choices_to=None,
parent_link=False, on_delete=None):
@@ -882,6 +893,9 @@ class ManyToOneRel(ForeignObjectRel):
self.field_name)
return data[0]
+ def set_field_name(self):
+ self.field_name = self.field_name or self.to._meta.pk.name
+
class OneToOneRel(ManyToOneRel):
def __init__(self, field, to, field_name, related_name=None, limit_choices_to=None,