MCPcopy
hub / github.com/django/django / resolve_expression

Method resolve_expression

django/db/models/aggregates.py:121–160  ·  view source on GitHub ↗
(
        self, query=None, allow_joins=True, reuse=None, summarize=False, for_save=False
    )

Source from the content-addressed store, hash-verified

119 return super().set_source_expressions(exprs)
120
121 def resolve_expression(
122 self, query=None, allow_joins=True, reuse=None, summarize=False, for_save=False
123 ):
124 # Aggregates are not allowed in UPDATE queries, so ignore for_save
125 c = super().resolve_expression(query, allow_joins, reuse, summarize)
126 if summarize:
127 # Summarized aggregates cannot refer to summarized aggregates.
128 for ref in c.get_refs():
129 if query.annotations[ref].is_summary:
130 raise FieldError(
131 f"Cannot compute {c.name}('{ref}'): '{ref}' is an aggregate"
132 )
133 elif not self.is_summary:
134 # Call Aggregate.get_source_expressions() to avoid
135 # returning self.filter and including that in this loop.
136 expressions = super(Aggregate, c).get_source_expressions()
137 for index, expr in enumerate(expressions):
138 if expr.contains_aggregate:
139 before_resolved = self.get_source_expressions()[index]
140 name = (
141 before_resolved.name
142 if hasattr(before_resolved, "name")
143 else repr(before_resolved)
144 )
145 raise FieldError(
146 "Cannot compute %s('%s'): '%s' is an aggregate"
147 % (c.name, name, name)
148 )
149 if (default := c.default) is None:
150 return c
151 if hasattr(default, "resolve_expression"):
152 default = default.resolve_expression(query, allow_joins, reuse, summarize)
153 if default._output_field_or_none is None:
154 default.output_field = c._output_field_or_none
155 else:
156 default = Value(default, c._output_field_or_none)
157 c.default = None # Reset the default argument before wrapping.
158 coalesce = Coalesce(c, default, output_field=c._output_field_or_none)
159 coalesce.is_summary = c.is_summary
160 return coalesce
161
162 @property
163 def default_alias(self):

Callers

nothing calls this directly

Calls 7

resolve_expressionMethod · 0.95
FieldErrorClass · 0.90
ValueClass · 0.90
CoalesceClass · 0.90
resolve_expressionMethod · 0.45
get_refsMethod · 0.45

Tested by

no test coverage detected