您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Django中具有多个参数的过滤器和链式过滤器之间的区别

Django中具有多个参数的过滤器和链式过滤器之间的区别

正如你在生成sql语句中看到的那样,差异不是某些人可能怀疑的“或”。这是WHERE和JOIN放置的方式。

Example1(相同的联接表):来自https://docs.djangoproject.com/en/dev/topics/db/queries/#spanning-multi-valued-relationships

Blog.objects.filter(
       entry__headline__contains='Lennon', 
       entry__pub_date__year=2018)

这将为你提供所有两个条目都具有一个条目的Blog (entry__headline__contains='Lennon') AND (entry__pub_date__year=2018),这是你从该查询中获得的期望。

结果:

Blog with {entry.headline: 'Life of Lennon', entry.pub_date: '2018'}

示例2(链接

Blog.objects.filter(
       entry__headline__contains='Lennon'
           ).filter(
       entry__pub_date__year=2018)

这将涵盖示例1的所有结果,但将产生更多结果。因为它首先使用(entry__headline__contains='Lennon')结果过滤器过滤所有博客,然后使用结果过滤器过滤所有博客(entry__pub_date__year=2018)

不同之处在于它还会为你提供以下结果:

具有多个条目的单个Blog

{entry.headline: '**Lennon**', entry.pub_date: 2000}, 
{entry.headline: 'Bill', entry.pub_date: **2018**}

评估第一个过滤器时,由于包含第一个条目,因此将其包括在内(即使该条目的其他条目不匹配也是如此)。当评估第二个过滤器时,由于有第二个条目,因此将本书包括在内。

一个表:但是,如果查询不涉及联接表,例如Yuji和DTing中的示例。结果是一样的。

Go 2022/1/1 18:23:02 有478人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶