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)