Поле фильтра Django QuerySet в списке JSONField - PullRequest
0 голосов
/ 30 октября 2019

У меня есть две модели. Variant, это не имеет значения, за исключением того факта, что оно имеет id, а SecondModel имеет JSONField с сериализованным списком id первой модели.
Я хочу получить QuerySet изVariant объекты модели, идентификаторы которых находятся в списке JSONField второго объекта модели.
Мне удалось сделать следующее:

class SecondModel(Model):
    variant_ids = JSONField()

    @property
    def variant_id_list(self):
        return json.loads(self.variant_ids or "[]")

    @property
    def variants(self):
        return Variant.objects.filter(id__in=self.variant_id_list)

Но вышеприведенный подход заставляет Джанго и Постгресаполучить variant_ids из БД, затем преобразовать его в список Python, а затем снова запросить БД, чтобы проверить, есть ли идентификатор в списке, тогда как (я думаю) БД может обрабатывать всю операцию целиком.
Есть ли способ сделать это проще?
Я не могу изменить JSONField на ArrayField или любой другой, это должно быть JSONField.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...