Skip to content

Commit fa7fadc

Browse files
committed
store DecimalField as Decimal128
1 parent 3c3ad0e commit fa7fadc

File tree

2 files changed

+7
-6
lines changed

2 files changed

+7
-6
lines changed

django_mongodb/features.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,6 @@ class DatabaseFeatures(BaseDatabaseFeatures):
3333
"lookup.tests.LookupTests.test_exact_none_transform",
3434
# "Save with update_fields did not affect any rows."
3535
"basic.tests.SelectOnSaveTests.test_select_on_save_lying_update",
36-
# filtering on large decimalfield, see https://code.djangoproject.com/ticket/34590
37-
# for some background.
38-
"model_fields.test_decimalfield.DecimalFieldTests.test_lookup_decimal_larger_than_max_digits",
39-
"model_fields.test_decimalfield.DecimalFieldTests.test_lookup_really_big_value",
4036
# 'TruncDate' object has no attribute 'as_mql'.
4137
"model_fields.test_datetimefield.DateTimeFieldTests.test_lookup_date_with_use_tz",
4238
"model_fields.test_datetimefield.DateTimeFieldTests.test_lookup_date_without_use_tz",

django_mongodb/operations.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import datetime
2-
import decimal
32
import uuid
43

4+
from bson.decimal128 import Decimal128
55
from django.conf import settings
66
from django.db.backends.base.operations import BaseDatabaseOperations
77
from django.utils import timezone
@@ -21,6 +21,10 @@ def adapt_datetimefield_value(self, value):
2121
value = timezone.make_aware(value)
2222
return value
2323

24+
def adapt_decimalfield_value(self, value, max_digits=None, decimal_places=None):
25+
"""Store DecimalField as Decimal128."""
26+
return Decimal128(value)
27+
2428
def adapt_timefield_value(self, value):
2529
"""Store TimeField as datetime."""
2630
if value is None:
@@ -56,7 +60,8 @@ def convert_datetimefield_value(self, value, expression, connection):
5660

5761
def convert_decimalfield_value(self, value, expression, connection):
5862
if value is not None:
59-
value = decimal.Decimal(value)
63+
# from Decimal128 to decimal.Decimal()
64+
value = value.to_decimal()
6065
return value
6166

6267
def convert_timefield_value(self, value, expression, connection):

0 commit comments

Comments
 (0)