From 0e0eb8a9553bb89347ceb159537ccc417cb5e7f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anssi=20K=C3=A4=C3=A4ri=C3=A4inen?= Date: Sun, 24 Mar 2013 20:57:02 +0200 Subject: [PATCH] Fixed field.rel.field_name handling This is a regression fix to multicolumn joins. Refs #19385. --- django/db/models/fields/related.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) 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,