Django JSON поле - поле id запроса
Я пытаюсь отфильтровать JSON-поле Django (бэкенд MariaDB, Django 4.0)
target_360 - это поле JSON, каждый запрос, который я пробовал, возвращает пустой кверисет, хотя отладочный отчет четко показывает совпадающий id в первой строке "родительского" запроса
поле в models.py, использующее django.models.JSONField
target_360 = models.JSONField(_('360 target'),default=None, null=True)
Код запроса
surveys_with_target = Survey_Instance.objects.filter(pulse_id=pulse_id, survey_id=survey_id, target_360__isnull=False)
logger.debug('First row target_360')
logger.debug(surveys_with_target[0].target_360)
logger.debug('target_id in filter')
logger.debug(target_id)
survey_test = surveys_with_target.filter(target_360__contains=target_id)
logger.debug("SURVEY TEST:")
logger.debug(survey_test)
survey_test = surveys_with_target.filter(target_360__id__contains=target_id)
logger.debug("SURVEY TEST 2:")
logger.debug(survey_test)
survey_test = surveys_with_target.filter(target_360__id=target_id)
logger.debug("SURVEY TEST 3:")
logger.debug(survey_test)
Отладочный вывод:
First row target_360
{"id": "189f5422-f522-4860-8794-a3375f84a086", "target_type": "Individual"}
target_id in filter
189f5422-f522-4860-8794-a3375f84a086
SURVEY TEST:
<QuerySet []>
SURVEY TEST 2:
<QuerySet []>
SURVEY TEST 3:
<QuerySet []>
Возможно, это что-то очень простое, что я делаю не так?
Вы почти добрались до решения. Попробуйте это
survey_test = surveys_with_target.filter(target_360__contains={'id':target_id})
# the above query will find all the target_360 results with the give target id.
Для получения более подробной информации о том, как делать запросы JSONField()
в Django, вот ссылка docs.