Unable to filter nested fields in JSONField using Django ORM
I am using Djongo to integrate MongoDB with my Django project. I have a model with a JSONField and I am trying to filter based on a nested field within the JSONField. Here's a simplified version of my model and the query I am attempting:
from djongo import models as mongo_models
class ProcessIDs(mongo_models.Model):
data = mongo_models.JSONField(max_length=1000, default=dict())
# ... other fields ...
# Example object creation
process = ProcessIDs.objects.create(
data={'redirect_ids': {'ids': ['1234567', '7654321'], 'status': 'active'}, "category_type": "custom"}
)
# Attempted query
active_processes = ProcessIDs.objects.filter(data__redirect_ids__status__exact='active')
This query results in the following error:
FieldError: Unsupported lookup ‘redirect_ids’ for JSONField or join on the field not permitted.
I am looking for a way to filter by the nested field data->redirect_ids->status using Django ORM with Djongo. Is this a known limitation, or is there a workaround to achieve this?
Try active_processes = ProcessIDs.objects.filter(data={"redirect_ids":{"status":'active'}})
Hi,
[EDIT] I have done this with a djongo version before Nov 13 merge. Maybe now it is fixed but still not uploaded to PIP so try with building from repo and use syntax proposed by @raykhey [/EDIT]
the problem is with LikeOp and CmpOp from operators.py - there should be a recursive dictionary crawler to build a proper Mongo query. My workaround was:
- clone repository
- fix
LikeOpby adding some method to crawl dictionary andCmpOpto properly build query - build a pip package using local repo (e.g. SO)
- use syntax proposed by @raykhey
Did any one find the solution for this? Actually, this is the basic need for normal query.