python - 在 django 查询集过滤器中,如何检查 json 字段中的至少一个键是否具有非空值?
问题描述
class Library(models.model):
book = JSONField(default=[], blank=True, null=True)
'book' 的可能结构是 {'title':'' ,'no_of_pages': '', 'author_name': '', 'color': '', edition: ''}
我正在尝试编写一个 django 查询,它只返回 book 至少有一个非空值键的记录(即title或no_of_pages或author_name或color或edition有一些值)
一种可能的解决方案是:
Author.objects.filter(
~Q(book__title='') |
~Q(book__no_of_pages='') |
~Q(book__author_name='') |
~Q(book__color='') |
~Q(book__edition='')
)
有没有更好的方法来做到这一点?在某些情况下,书籍将来可能会有一些额外的键,例如出版商或可用性
如何在不提及字段的特定键的情况下执行此过滤器(只需检查至少一个具有某个值的键)?或者任何更短的方法来编写这个查询与所有提到的键?
解决方案
这本书不是空字典的作者列表。
Author.objects.filter(~Q(book__exact={}))
推荐阅读
- python - PANDAS 根据通配符输入特定 ID
- node.js - CloudFormation 更新堆栈
- laravel - Livewire Alpinejs 跨文件发射/调度变量
- javascript - Tic Tac Toe:如何将工厂函数合并到我的代码中?
- python-3.x - 从推理 Pytorch 接收坐标
- react-native - 使用从 URL 中获取的数组显示在 flatList 中
- unit-testing - MSBuild 不在 Bin 目录中创建 DLL
- python - 如何仅根据 numpy 数组判断频道顺序?
- flutter - 小部件构建方法返回错误 - 此函数的返回类型为“小部件”,但不以返回语句结束
- python - 在匹配两个数据框具有的列中的值后,如何将数据框的列值作为新列放入另一个数据框?