У меня есть две модели. 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
.