(
self, query=None, allow_joins=True, reuse=None, summarize=False, for_save=False
)
| 776 | return expression_wrapper % sql, tuple(expression_params) |
| 777 | |
| 778 | def resolve_expression( |
| 779 | self, query=None, allow_joins=True, reuse=None, summarize=False, for_save=False |
| 780 | ): |
| 781 | resolved = super().resolve_expression( |
| 782 | query, |
| 783 | allow_joins, |
| 784 | reuse, |
| 785 | summarize, |
| 786 | for_save, |
| 787 | ) |
| 788 | if not isinstance(self, (DurationExpression, TemporalSubtraction)): |
| 789 | try: |
| 790 | lhs_type = resolved.lhs.output_field.get_internal_type() |
| 791 | except (AttributeError, FieldError): |
| 792 | lhs_type = None |
| 793 | try: |
| 794 | rhs_type = resolved.rhs.output_field.get_internal_type() |
| 795 | except (AttributeError, FieldError): |
| 796 | rhs_type = None |
| 797 | if "DurationField" in {lhs_type, rhs_type} and lhs_type != rhs_type: |
| 798 | return DurationExpression( |
| 799 | resolved.lhs, resolved.connector, resolved.rhs |
| 800 | ) |
| 801 | datetime_fields = {"DateField", "DateTimeField", "TimeField"} |
| 802 | if ( |
| 803 | self.connector == self.SUB |
| 804 | and lhs_type in datetime_fields |
| 805 | and lhs_type == rhs_type |
| 806 | ): |
| 807 | return TemporalSubtraction(resolved.lhs, resolved.rhs) |
| 808 | return resolved |
| 809 | |
| 810 | @cached_property |
| 811 | def allowed_default(self): |
nothing calls this directly
no test coverage detected