(
self, query=None, allow_joins=True, reuse=None, summarize=False, for_save=False
)
| 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): |
nothing calls this directly
no test coverage detected