Fixed field.rel.field_name handling
This is a regression fix to multicolumn joins. Refs #19385.
This commit is contained in:
parent
014638a131
commit
0e0eb8a955
|
@ -126,6 +126,7 @@ class RelatedField(Field):
|
||||||
self.name = self.name or (self.rel.to._meta.model_name + '_' + self.rel.to._meta.pk.name)
|
self.name = self.name or (self.rel.to._meta.model_name + '_' + self.rel.to._meta.pk.name)
|
||||||
if self.verbose_name is None:
|
if self.verbose_name is None:
|
||||||
self.verbose_name = self.rel.to._meta.verbose_name
|
self.verbose_name = self.rel.to._meta.verbose_name
|
||||||
|
self.rel.set_field_name()
|
||||||
|
|
||||||
def do_related_class(self, other, cls):
|
def do_related_class(self, other, cls):
|
||||||
self.set_attributes_from_rel()
|
self.set_attributes_from_rel()
|
||||||
|
@ -863,6 +864,16 @@ class ForeignObjectRel(object):
|
||||||
def get_extra_restriction(self, where_class, alias, related_alias):
|
def get_extra_restriction(self, where_class, alias, related_alias):
|
||||||
return self.field.get_extra_restriction(where_class, related_alias, 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):
|
class ManyToOneRel(ForeignObjectRel):
|
||||||
def __init__(self, field, to, field_name, related_name=None, limit_choices_to=None,
|
def __init__(self, field, to, field_name, related_name=None, limit_choices_to=None,
|
||||||
parent_link=False, on_delete=None):
|
parent_link=False, on_delete=None):
|
||||||
|
@ -882,6 +893,9 @@ class ManyToOneRel(ForeignObjectRel):
|
||||||
self.field_name)
|
self.field_name)
|
||||||
return data[0]
|
return data[0]
|
||||||
|
|
||||||
|
def set_field_name(self):
|
||||||
|
self.field_name = self.field_name or self.to._meta.pk.name
|
||||||
|
|
||||||
|
|
||||||
class OneToOneRel(ManyToOneRel):
|
class OneToOneRel(ManyToOneRel):
|
||||||
def __init__(self, field, to, field_name, related_name=None, limit_choices_to=None,
|
def __init__(self, field, to, field_name, related_name=None, limit_choices_to=None,
|
||||||
|
|
Loading…
Reference in New Issue