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.

Вернуться на верх