首页 > 解决方案 > 按字段过滤 django 模型并包含具有空字段的数据

问题描述

我有数据集,我需要从公司获取一些文章,但在同一个查询中,我需要获取 company = null 的数据。

基本上获取 company = 1 或 company = null

我尝试了类似的方法,但过滤器无法识别“无”而只是跳过。

# example 1
Article.objects.filter(company__in=[1, None])

我尝试了这样的方法并且这有效,但我需要类似上面的示例,因为我有过滤框架,它将 dict 作为自定义过滤器,所以我需要键值对。

# example 2
Article.objects.filter(Q(company_id=1) | Q(company=None))

有什么方法可以实现示例 1 或一些类似的解决方案?

编辑

如果我坚持使用示例 2,有什么方法可以将这两者结合起来,我的框架中有类似的东西。

Article.objects.filter(**custom_filter)

自定义过滤器是dict,例如我目前有

    custom_filter = {
        'app': 1,
        'company': 1
    }

标签: python-3.xdjango

解决方案


据我所知,你有一个thiscustom_filter没有过滤in器(至少有空值?)。而且你还有一个你想要的 id 列表,也许你也可能想要也可能不想要空值。您可以执行以下操作来进行此类查询:

company_list = [1, 2, 3] # Don't put `None` here
nulls_needed = True # Change as per your need
custom_filter = {
    'app': 1,
}


Article.objects.filter(
    Q(company__isnull=nulls_needed) | Q(company__in=company_list), # positional args first
    **custom_filter # keyword args later
)

推荐阅读