diff --git a/django_mongodb/features.py b/django_mongodb/features.py index 7989438ee..1c85301ac 100644 --- a/django_mongodb/features.py +++ b/django_mongodb/features.py @@ -94,14 +94,12 @@ class DatabaseFeatures(BaseDatabaseFeatures): "lookup.tests.LookupTests.test_lookup_collision", "expressions.test_queryset_values.ValuesExpressionsTests.test_values_list_expression", "expressions.test_queryset_values.ValuesExpressionsTests.test_values_list_expression_flat", + "expressions.tests.IterableLookupInnerExpressionsTests.test_expressions_in_lookups_join_choice", "expressions_case.tests.CaseExpressionTests.test_join_promotion", "expressions_case.tests.CaseExpressionTests.test_join_promotion_multiple_annotations", "ordering.tests.OrderingTests.test_order_by_grandparent_fk_with_expression_in_default_ordering", "ordering.tests.OrderingTests.test_order_by_parent_fk_with_expression_in_default_ordering", "ordering.tests.OrderingTests.test_order_by_ptr_field_with_default_ordering_by_expression", - # 'Col' object has no attribute 'utcoffset' - "expressions.tests.IterableLookupInnerExpressionsTests.test_expressions_in_lookups_join_choice", - "expressions.tests.IterableLookupInnerExpressionsTests.test_in_lookup_allows_F_expressions_and_expressions_for_datetimes", # pymongo.errors.OperationFailure: $multiply only supports numeric # types, not date. (should be wrapped in DatabaseError). "expressions.tests.FTimeDeltaTests.test_invalid_operator", diff --git a/django_mongodb/operations.py b/django_mongodb/operations.py index 78bbcf968..7c7be3f17 100644 --- a/django_mongodb/operations.py +++ b/django_mongodb/operations.py @@ -36,6 +36,9 @@ def adapt_datefield_value(self, value): def adapt_datetimefield_value(self, value): if value is None: return None + # Expression values are adapted by the database. + if hasattr(value, "resolve_expression"): + return value if timezone.is_aware(value): if settings.USE_TZ: value = timezone.make_naive(value, self.connection.timezone) @@ -64,6 +67,9 @@ def adapt_timefield_value(self, value): """Store TimeField as datetime.""" if value is None: return None + # Expression values are adapted by the database. + if hasattr(value, "resolve_expression"): + return value if timezone.is_aware(value): raise ValueError("MongoDB backend does not support timezone-aware times.") return datetime.datetime.combine(datetime.datetime.min.date(), value)