Skip to content

Commit 0ce64ca

Browse files
committed
fix JSONField negative indexing
1 parent d2e8f0e commit 0ce64ca

File tree

1 file changed

+7
-2
lines changed
  • django_mongodb_backend/fields

1 file changed

+7
-2
lines changed

django_mongodb_backend/fields/json.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
def valid_path_key_name(key_name):
2525
# A lookup can use path syntax (field.subfield) unless it contains a dollar
2626
# sign or period.
27-
return not any(char in key_name for char in ("$", "."))
27+
return not key_name.startswith("-") and not any(char in key_name for char in ("$", "."))
2828

2929

3030
def build_json_mql_path(lhs, key_transforms, as_expr=False):
@@ -36,7 +36,12 @@ def build_json_mql_path(lhs, key_transforms, as_expr=False):
3636
get_field = {"$getField": {"input": result, "field": key}}
3737
# Handle array indexing if the key is a digit. If key is something
3838
# like '001', it's not an array index despite isdigit() returning True.
39-
if key.isdigit() and str(int(key)) == key:
39+
try:
40+
int(key)
41+
is_digit = str(int(key)) == key
42+
except ValueError:
43+
is_digit = False
44+
if is_digit:
4045
result = {
4146
"$cond": {
4247
"if": {"$isArray": result},

0 commit comments

Comments
 (0)