mirror of
https://github.com/django/django.git
synced 2025-10-31 09:41:08 +00:00
Fixed #24986 -- Added support for annotations in DISTINCT queries.
This commit is contained in:
committed by
Tim Graham
parent
98bcdfa8bd
commit
1f7b25c1a7
@@ -548,7 +548,10 @@ class SQLCompiler(object):
|
||||
_, targets, alias, joins, path, _ = self._setup_joins(parts, opts, None)
|
||||
targets, alias, _ = self.query.trim_joins(targets, joins, path)
|
||||
for target in targets:
|
||||
result.append("%s.%s" % (qn(alias), qn2(target.column)))
|
||||
if name in self.query.annotation_select:
|
||||
result.append(name)
|
||||
else:
|
||||
result.append("%s.%s" % (qn(alias), qn2(target.column)))
|
||||
return result
|
||||
|
||||
def find_ordering_name(self, name, opts, alias=None, default_order='ASC',
|
||||
|
||||
@@ -1292,9 +1292,15 @@ class Query(object):
|
||||
cur_names_with_path = (name, [])
|
||||
if name == 'pk':
|
||||
name = opts.pk.name
|
||||
|
||||
field = None
|
||||
try:
|
||||
field = opts.get_field(name)
|
||||
except FieldDoesNotExist:
|
||||
if name in self.annotation_select:
|
||||
field = self.annotation_select[name].output_field
|
||||
|
||||
if field is not None:
|
||||
# Fields that contain one-to-many relations with a generic
|
||||
# model (like a GenericForeignKey) cannot generate reverse
|
||||
# relations and therefore cannot be used for reverse querying.
|
||||
@@ -1305,8 +1311,11 @@ class Query(object):
|
||||
"querying. If it is a GenericForeignKey, consider "
|
||||
"adding a GenericRelation." % name
|
||||
)
|
||||
model = field.model._meta.concrete_model
|
||||
except FieldDoesNotExist:
|
||||
try:
|
||||
model = field.model._meta.concrete_model
|
||||
except AttributeError:
|
||||
model = None
|
||||
else:
|
||||
# We didn't find the current field, so move position back
|
||||
# one step.
|
||||
pos -= 1
|
||||
|
||||
Reference in New Issue
Block a user