self._output_field = NaiveDateTimeField() elif value_field is None: value_expr = self.get_source_expressions()[0] if isinstance(value_expr, Value): if timezone.is_naive(value_expr.value): self._output_field = DateTimeField() else: self._output_field = NaiveDateTimeField() return getattr(self, "_output_field", None) _monkeypatching = False _this_module = sys.modules[__name__] _db_functions = sys.modules["django.db.models.functions"] _lookups = set(DateTimeField.get_lookups().values()) _patch_classes = [ (Extract, [NaiveAsSQLMixin, NaiveTimezoneMixin]), (TruncBase, [NaiveAsSQLMixin, NaiveTimezoneMixin, NaiveConvertValueMixin]), ] for original, mixins in _patch_classes: for cls in original.__subclasses__(): bases = tuple(mixins) + (cls, ) naive_cls = type(cls.__name__, bases, {}) if _monkeypatching: setattr(_db_functions, cls.__name__, naive_cls) if cls in _lookups: NaiveDateTimeField.register_lookup(naive_cls)