【问题标题】:how to construct django Q object matching none如何构造没有匹配的django Q对象
【发布时间】:2015-07-06 04:19:36
【问题描述】:

我想知道哪种方法是构造Q(...) 对象的正确方法,该对象不匹配查询集中的对象。 Q()~Q() 似乎都匹配 所有 个对象!

【问题讨论】:

  • 你要查询哪个?
  • 我想找到一个 q 使得 M.objects.filter(q) 与 M.objects.none() 相同
  • 为什么不使用 EmptyQuerySet?
  • 因为过滤器 q 构造一次,多次使用。我不想在每次使用时都加上 if...else。

标签: django django-q


【解决方案1】:

Q(pk__in=[]) 应该可以解决问题。

【讨论】:

  • 很高兴注意到优化器将正确地简化复杂的表达式。查询( Q(pk__in=[]) & Q(foo="bar") ) | Q(hello="world") 会将条件简化为WHERE "hello" = world。它也适用于波浪号~ 否定。 Q(pk=None) 没有以同样的方式得到优化(大概是因为 pk 可以被覆盖)。
【解决方案2】:

Q(pk=None) 工作正常。

Q(pk__in=[]) 也可以正常工作,并且不会访问数据库。

【讨论】:

    猜你喜欢
    • 2011-08-16
    • 2014-05-15
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2014-11-03
    • 2016-07-22
    • 1970-01-01
    • 2022-01-15
    相关资源
    最近更新 更多