我有一个包含jsonbfield的模型,需要查询字典的值。在查询中,我需要确保dictionary的所有值都是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()))
但我不能在查询中这样做。我想知道是否有一种方法可以在将结果保存在查询集中的同时检查它,而不是将其计算到列表中并在那里检查。你知道吗
限制:
bulk_create
函数,所以覆盖save不是一个选项
在我看来,关于性能,最好的选择是创建一个新的计算字段,并根据它进行过滤:
现在,您的查询非常简单,而且索引友好:
更多信息请访问djangoOverriding predefined model methods文档。你知道吗
正如docs所说,您只能定义一个可调用的默认值,例如
dict
。话虽如此,我相信您应该使用dict
作为默认值,如果字段为空,您可以使用它进行过滤。有些人喜欢:相关问题 更多 >
编程相关推荐