class Library(models.model):
book = JSONField(default=[], blank=True, null=True)
'book'的可能结构是{'title':'','no_of_pages':'','author_name':'','color':'',edition:''}
我正在尝试编写一个django查询,该查询仅返回书中至少有一个非空值的记录(即 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='')
)
有没有更好的方法呢?可能会出现以后书籍可能会有一些额外的密钥,例如发布者或可用性
如何在不必提及字段的特定键的情况下执行此过滤器(只检查至少一个具有某些值的键)?或者用所有提到的密钥编写此查询的更短方法?
答案 0 :(得分:0)
Author.objects.filter(book__has_any_keys=['title', 'no_of_pages', 'author_name', 'color'])
按照documentation中的规定尝试此操作,如果这适用于您。
答案 1 :(得分:0)
这本书不是空字典的作者列表。
Author.objects.filter(~Q(book__exact={}))