mirror of
https://github.com/django/django.git
synced 2025-10-24 22:26:08 +00:00
Fixed #26230 -- Made default_related_name affect related_query_name.
This commit is contained in:
@@ -290,8 +290,13 @@ class RelatedField(Field):
|
||||
|
||||
if not cls._meta.abstract:
|
||||
if self.remote_field.related_name:
|
||||
related_name = force_text(self.remote_field.related_name) % {
|
||||
related_name = self.remote_field.related_name
|
||||
else:
|
||||
related_name = self.opts.default_related_name
|
||||
if related_name:
|
||||
related_name = force_text(related_name) % {
|
||||
'class': cls.__name__.lower(),
|
||||
'model_name': cls._meta.model_name.lower(),
|
||||
'app_label': cls._meta.app_label.lower()
|
||||
}
|
||||
self.remote_field.related_name = related_name
|
||||
|
||||
@@ -187,11 +187,6 @@ class ForeignObjectRel(object):
|
||||
return None
|
||||
if self.related_name:
|
||||
return self.related_name
|
||||
if opts.default_related_name:
|
||||
return opts.default_related_name % {
|
||||
'model_name': opts.model_name.lower(),
|
||||
'app_label': opts.app_label.lower(),
|
||||
}
|
||||
return opts.model_name + ('_set' if self.multiple else '')
|
||||
|
||||
def get_cache_name(self):
|
||||
|
||||
@@ -7,6 +7,7 @@ databases). The abstraction barrier only works one way: this module has to know
|
||||
all about the internals of models in order to get the information it needs.
|
||||
"""
|
||||
import copy
|
||||
import warnings
|
||||
from collections import Counter, Iterator, Mapping, OrderedDict
|
||||
from itertools import chain, count, product
|
||||
from string import ascii_uppercase
|
||||
@@ -30,6 +31,7 @@ from django.db.models.sql.where import (
|
||||
AND, OR, ExtraWhere, NothingNode, WhereNode,
|
||||
)
|
||||
from django.utils import six
|
||||
from django.utils.deprecation import RemovedInDjango20Warning
|
||||
from django.utils.encoding import force_text
|
||||
from django.utils.tree import Node
|
||||
|
||||
@@ -1288,6 +1290,19 @@ class Query(object):
|
||||
except FieldDoesNotExist:
|
||||
if name in self.annotation_select:
|
||||
field = self.annotation_select[name].output_field
|
||||
elif pos == 0:
|
||||
for rel in opts.related_objects:
|
||||
if (name == rel.related_model._meta.model_name and
|
||||
rel.related_name == rel.related_model._meta.default_related_name):
|
||||
related_name = rel.related_name
|
||||
field = opts.get_field(related_name)
|
||||
warnings.warn(
|
||||
"Query lookup '%s' is deprecated in favor of "
|
||||
"Meta.default_related_name '%s'."
|
||||
% (name, related_name),
|
||||
RemovedInDjango20Warning, 2
|
||||
)
|
||||
break
|
||||
|
||||
if field is not None:
|
||||
# Fields that contain one-to-many relations with a generic
|
||||
|
||||
Reference in New Issue
Block a user