JSONField lis中的Django QuerySet筛选器字段

2024-05-13 23:49:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个模型Variant,这是不相关的,除了它有idSecondModel有一个JSONField和第一个模型的id的序列化列表。
我想获取第二个模型对象的Variant模型对象的查询集,该对象的id位于第二个模型对象的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)

但是上面的aproach强制Django和Postgres从DB获取variant_ids,然后将其转换为python列表,然后再次请求DB检查列表中是否有id,而(我认为)DB本身可以处理整个操作。
有没有更简单的方法呢?
我不能将JSONField更改为ArrayField或任何其他,它必须是JSONField


Tags: 对象模型selfidids列表dbreturn