【问题标题】:How to filter Django objects to accept matches and NULLs?如何过滤 Django 对象以接受匹配项和 NULL?
【发布时间】:2015-06-20 09:08:46
【问题描述】:

我有一个模型,它有一个ForeignKey 字段和null=True

字段语义是 NULL 条目是允许的,而非 NULL 条目将其绑定到外部表中的单个行。

我想构建一个 ORM 过滤器,它对应于:

SELECT * FROM foo
WHERE foo.fk_field = ?
OR foo.fk_field IS NULL

(问号代表外部表中的单个值。)

是否可以在 Django ORM 中执行此操作,所以我需要求助于 raw 查询吗?

【问题讨论】:

    标签: python django orm filter


    【解决方案1】:

    我认为这比其他答案更具可读性。请注意,我不确定何时开始支持此功能。

    Foo.objects.filter(a=b) | Bar.objects.filter(c=d)
    

    【讨论】:

      【解决方案2】:

      您可以使用Q 对象实现此目的:

      from django.db.models import Q
      
      Foo.objects.filter(Q(fk=fk) | Q(fk__isnull=True))
      

      【讨论】:

      • 感谢您的回答,但我已经接受了 catavaran 几秒钟前的回答。
      【解决方案3】:

      使用Q objects

      from django.db.models import Q
      
      Foo.objects.filter(Q(fk_field=fk_value) | Q(fk_field=None))
      

      【讨论】:

        猜你喜欢
        • 2012-11-15
        • 1970-01-01
        • 2014-05-07
        • 1970-01-01
        • 2016-10-13
        • 1970-01-01
        • 2016-12-04
        • 1970-01-01
        • 2012-12-22
        相关资源
        最近更新 更多