summaryrefslogtreecommitdiff
path: root/django/db/models/sql
diff options
context:
space:
mode:
Diffstat (limited to 'django/db/models/sql')
-rw-r--r--django/db/models/sql/compiler.py23
1 files changed, 12 insertions, 11 deletions
diff --git a/django/db/models/sql/compiler.py b/django/db/models/sql/compiler.py
index 56a759b1bd..b0b2ac5583 100644
--- a/django/db/models/sql/compiler.py
+++ b/django/db/models/sql/compiler.py
@@ -256,17 +256,8 @@ class SQLCompiler:
# self.query.select is a special case. These columns never go to
# any model.
cols = self.query.select
- if cols:
- klass_info = {
- "model": self.query.model,
- "select_fields": list(
- range(
- len(self.query.extra_select),
- len(self.query.extra_select) + len(cols),
- )
- ),
- }
selected = []
+ select_fields = None
if self.query.selected is None:
selected = [
*(
@@ -276,18 +267,28 @@ class SQLCompiler:
*((None, col) for col in cols),
*self.query.annotation_select.items(),
]
+ select_fields = list(
+ range(
+ len(self.query.extra_select),
+ len(self.query.extra_select) + len(cols),
+ )
+ )
else:
- for alias, expression in self.query.selected.items():
+ select_fields = []
+ for index, (alias, expression) in enumerate(self.query.selected.items()):
# Reference to an annotation.
if isinstance(expression, str):
expression = self.query.annotations[expression]
# Reference to a column.
elif isinstance(expression, int):
+ select_fields.append(index)
expression = cols[expression]
# ColPairs cannot be aliased.
if isinstance(expression, ColPairs):
alias = None
selected.append((alias, expression))
+ if select_fields:
+ klass_info = {"model": self.query.model, "select_fields": select_fields}
for select_idx, (alias, expression) in enumerate(selected):
if alias: