gpt4 book ai didi

python - 如何查询和比较对象上 JSONbField 的值?

转载 作者:行者123 更新时间:2023-12-01 07:36:03 25 4
gpt4 key购买 nike

我有一个包含 jsonbfield 的模型,需要查询字典的值。在查询中,我需要确保字典的所有值都是 None,或者整个字段都是 None。

我的模型看起来像:

MyModel(models.Model):
date_created=DatetimeField()
json_dict = JSONField(default=dict, null=True)

本质上我想要得到类似的东西:

MyModel.objects.filter(Q(json_dict={}) |Q(json_dict=None) | Q(all(v=None for v in json_dict.values())))

最重要的部分是

Q(all(v=None for v in json_dict.values()))

但我不能在查询中这样做。我想知道是否有一种方法可以在将结果保留在查询集中的同时检查这一点,而不是将其评估到列表中并在那里进行检查。

限制:

  • 我不知道字典的键,因为它们对于 MyModel 中的每个对象都是不同的。
  • 我必须能够使用 bulk_create 函数,因此无法覆盖保存

最佳答案

在我看来,关于性能,您的最佳选择是创建一个新的计算字段并按其进行过滤:

MyModel(models.Model):
date_created=DatetimeField()
json_dict = JSONField(default=dict, null=True)
is_empty = BooleanField(default=True, editable=False) #<-calculated field.

def save(self, *args, **kwargs):
self.is_empty = ( self.metadata is None or
# self.json_dict=={} or ## other checks
all(v is None for v in self.json_dict.values()) )
super().save(*args, **kwargs)

现在,您的查询非常简单,而且索引友好:

MyModel.objects.filter( is_empty = True )

更多信息请参见 django Overriding predefined model methods文档。

关于python - 如何查询和比较对象上 JSONbField 的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56987451/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com