2
class Library(models.model):
    book = JSONField(default=[], blank=True, null=True)

'book' 的可能结构是 {'title':'' ,'no_of_pages': '', 'author_name': '', 'color': '', edition: ''}

我正在尝试编写一个 django 查询,它只返回 book 至少有一个非空值键的记录(即titleno_of_pagesauthor_namecoloredition有一些值)

一种可能的解决方案是:

Author.objects.filter(
    ~Q(book__title='') |
    ~Q(book__no_of_pages='') | 
    ~Q(book__author_name='') |
    ~Q(book__color='') |
    ~Q(book__edition='')
)

有没有更好的方法来做到这一点?在某些情况下,书籍将来可能会有一些额外的键,例如出版商可用性

如何在不提及字段的特定键的情况下执行此过滤器(只需检查至少一个具有某个值的键)?或者任何更短的方法来编写这个查询与所有提到的键?

4

2 回答 2

0

这本书不是空字典的作者列表。

Author.objects.filter(~Q(book__exact={}))
于 2021-07-29T14:56:53.587 回答
0
Author.objects.filter(book__has_any_keys=['title', 'no_of_pages', 'author_name', 'color'])

如果这对您有用,请按照文档中的说明尝试。

于 2018-05-20T07:52:11.083 回答