【问题标题】:Django __in lookup doesn't look of None valuesDjango __in 查找看起来没有 None 值
【发布时间】:2020-06-09 01:10:36
【问题描述】:

假设我有一个名为 Subject 的模型,我想根据值列表过滤值。 请考虑以下列表。

["John", "Brad", None]

当我尝试使用 __in 查找过滤掉结果时,它不会查找 None 值。例如

Subject.objects.filter(user__in=["John", "Brad", None])

这将为 John 和 Brad 提供查询集,但不提供 None。我在这里缺少什么?谁能帮帮我

【问题讨论】:

标签: django django-rest-framework


【解决方案1】:

NULL在 DB 中(None 在 django 中)不是常规值,因此它们需要不同的方法:

Subject.objects.filter(Q(user__in=["John", "Brad", ]) | Q(user__isnull=True,))

【讨论】:

    【解决方案2】:

    尝试像这样过滤

    from django.db.models import Q
    
    Subject.objects.filter(Q(user__in=["John", "Brad"]) | Q(user__isnull=True))
    

    【讨论】:

      【解决方案3】:

      使用 Q 对象更适合这种情况:

      Subject.objects.filter(Q(user__in=["John", "Brad"]) | Q(user__isnull=True))
      

      【讨论】:

        【解决方案4】:

        您可以将Q objects 用于OR, AND and NOT 操作。 Q 对象让您可以完全控制查询的 where 子句。

        您的查询集将类似于:

        from django.db.models import Q
        Subject.objects.filter(Q(user=None) | Q(user__in=["John", "Brad"]))
        

        您可以以更复杂的方式组合 Q 对象来生成复杂的查询。

        【讨论】:

          猜你喜欢
          • 2012-03-29
          • 2013-02-28
          • 1970-01-01
          • 1970-01-01
          • 2013-08-03
          • 1970-01-01
          • 1970-01-01
          • 2011-11-13
          • 2021-08-11
          相关资源
          最近更新 更多