Skip to content

Commit f7dfa83

Browse files
committed
fix F expression with datetime/time lookups
1 parent 4f52df0 commit f7dfa83

File tree

2 files changed

+7
-3
lines changed

2 files changed

+7
-3
lines changed

django_mongodb/features.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,14 +94,12 @@ class DatabaseFeatures(BaseDatabaseFeatures):
9494
"lookup.tests.LookupTests.test_lookup_collision",
9595
"expressions.test_queryset_values.ValuesExpressionsTests.test_values_list_expression",
9696
"expressions.test_queryset_values.ValuesExpressionsTests.test_values_list_expression_flat",
97+
"expressions.tests.IterableLookupInnerExpressionsTests.test_expressions_in_lookups_join_choice",
9798
"expressions_case.tests.CaseExpressionTests.test_join_promotion",
9899
"expressions_case.tests.CaseExpressionTests.test_join_promotion_multiple_annotations",
99100
"ordering.tests.OrderingTests.test_order_by_grandparent_fk_with_expression_in_default_ordering",
100101
"ordering.tests.OrderingTests.test_order_by_parent_fk_with_expression_in_default_ordering",
101102
"ordering.tests.OrderingTests.test_order_by_ptr_field_with_default_ordering_by_expression",
102-
# 'Col' object has no attribute 'utcoffset'
103-
"expressions.tests.IterableLookupInnerExpressionsTests.test_expressions_in_lookups_join_choice",
104-
"expressions.tests.IterableLookupInnerExpressionsTests.test_in_lookup_allows_F_expressions_and_expressions_for_datetimes",
105103
# pymongo.errors.OperationFailure: $multiply only supports numeric
106104
# types, not date. (should be wrapped in DatabaseError).
107105
"expressions.tests.FTimeDeltaTests.test_invalid_operator",

django_mongodb/operations.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@ def adapt_datefield_value(self, value):
3636
def adapt_datetimefield_value(self, value):
3737
if value is None:
3838
return None
39+
# Expression values are adapted by the database.
40+
if hasattr(value, "resolve_expression"):
41+
return value
3942
if timezone.is_aware(value):
4043
if settings.USE_TZ:
4144
value = timezone.make_naive(value, self.connection.timezone)
@@ -64,6 +67,9 @@ def adapt_timefield_value(self, value):
6467
"""Store TimeField as datetime."""
6568
if value is None:
6669
return None
70+
# Expression values are adapted by the database.
71+
if hasattr(value, "resolve_expression"):
72+
return value
6773
if timezone.is_aware(value):
6874
raise ValueError("MongoDB backend does not support timezone-aware times.")
6975
return datetime.datetime.combine(datetime.datetime.min.date(), value)

0 commit comments

Comments
 (0)