Skip to content

Commit 245e487

Browse files
committed
implement ObjectIdAutoField.get_internal_type()
It also requires implementing DatabaseOperations.integer_field_range() since the base class's implementation doesn't handle "ObjectIdAutoField" and ObjectIdAutoField accepts integers.
1 parent b660425 commit 245e487

File tree

3 files changed

+18
-0
lines changed

3 files changed

+18
-0
lines changed

django_mongodb/fields/auto.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@ def get_prep_value(self, value):
3939
return int(value)
4040
raise ValueError(f"Field '{self.name}' expected an ObjectId but got {value!r}.") from e
4141

42+
def get_internal_type(self):
43+
return "ObjectIdAutoField"
44+
4245
def db_type(self, connection):
4346
return "objectId"
4447

django_mongodb/operations.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,17 @@ def explain_query_prefix(self, format=None, **options):
214214
super().explain_query_prefix(format, **options)
215215
return validated_options
216216

217+
def integer_field_range(self, internal_type):
218+
# MongODB doesn't enforce any integer constraints, but it supports
219+
# integers up to 64 bits.
220+
if internal_type in {
221+
"PositiveBigIntegerField",
222+
"PositiveIntegerField",
223+
"PositiveSmallIntegerField",
224+
}:
225+
return (0, 9223372036854775807)
226+
return (-9223372036854775808, 9223372036854775807)
227+
217228
def prepare_join_on_clause(self, lhs_table, lhs_field, rhs_table, rhs_field):
218229
lhs_expr, rhs_expr = super().prepare_join_on_clause(
219230
lhs_table, lhs_field, rhs_table, rhs_field

tests/model_fields_/test_autofield.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@ def test_deconstruct(self):
1111
self.assertEqual(args, [])
1212
self.assertEqual(kwargs, {"primary_key": True})
1313

14+
def test_get_internal_type(self):
15+
f = ObjectIdAutoField()
16+
self.assertEqual(f.get_internal_type(), "ObjectIdAutoField")
17+
1418
def test_to_python(self):
1519
f = ObjectIdAutoField()
1620
self.assertEqual(f.to_python("1"), 1)

0 commit comments

Comments
 (0)