diff --git a/django_mongodb/features.py b/django_mongodb/features.py index 1c5226bd..622d0fa9 100644 --- a/django_mongodb/features.py +++ b/django_mongodb/features.py @@ -33,10 +33,6 @@ class DatabaseFeatures(BaseDatabaseFeatures): "lookup.tests.LookupTests.test_exact_none_transform", # "Save with update_fields did not affect any rows." "basic.tests.SelectOnSaveTests.test_select_on_save_lying_update", - # filtering on large decimalfield, see https://code.djangoproject.com/ticket/34590 - # for some background. - "model_fields.test_decimalfield.DecimalFieldTests.test_lookup_decimal_larger_than_max_digits", - "model_fields.test_decimalfield.DecimalFieldTests.test_lookup_really_big_value", # 'TruncDate' object has no attribute 'as_mql'. "model_fields.test_datetimefield.DateTimeFieldTests.test_lookup_date_with_use_tz", "model_fields.test_datetimefield.DateTimeFieldTests.test_lookup_date_without_use_tz", diff --git a/django_mongodb/operations.py b/django_mongodb/operations.py index 3768584f..5bd71b93 100644 --- a/django_mongodb/operations.py +++ b/django_mongodb/operations.py @@ -1,7 +1,7 @@ import datetime -import decimal import uuid +from bson.decimal128 import Decimal128 from django.conf import settings from django.db.backends.base.operations import BaseDatabaseOperations from django.utils import timezone @@ -21,6 +21,10 @@ def adapt_datetimefield_value(self, value): value = timezone.make_aware(value) return value + def adapt_decimalfield_value(self, value, max_digits=None, decimal_places=None): + """Store DecimalField as Decimal128.""" + return Decimal128(value) + def adapt_timefield_value(self, value): """Store TimeField as datetime.""" if value is None: @@ -56,7 +60,8 @@ def convert_datetimefield_value(self, value, expression, connection): def convert_decimalfield_value(self, value, expression, connection): if value is not None: - value = decimal.Decimal(value) + # from Decimal128 to decimal.Decimal() + value = value.to_decimal() return value def convert_timefield_value(self, value, expression, connection):