首页 > 解决方案 > 在 django 查询集过滤器中,如何检查 json 字段中的至少一个键是否具有非空值?

问题描述

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='')
)

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

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

标签: pythondjangodjango-querysetdjango-jsonfield

解决方案


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

Author.objects.filter(~Q(book__exact={}))

推荐阅读