彩票网站开发风险,风铃上做的网站发布时号码填写,盐亭做网站,重庆市招标网官网跨多值查询
跨越 ManyToManyField 或反查 ForeignKey #xff08;例如从 Blog 到 Entry #xff09;时#xff0c;对多个属性进行过滤会产生这样的问题#xff1a;是否要求每个属性都在同一个相关对象中重合。
filter()
先看filter()#xff0c;通过一个例子看#xf…跨多值查询
跨越 ManyToManyField 或反查 ForeignKey 例如从 Blog 到 Entry 时对多个属性进行过滤会产生这样的问题是否要求每个属性都在同一个相关对象中重合。
filter()
先看filter()通过一个例子看
from datetime import datefrom django.db import modelsclass Blog(models.Model):name models.CharField(max_length100)tagline models.TextField()def __str__(self):return self.nameclass Entry(models.Model):blog models.ForeignKey(Blog, on_deletemodels.CASCADE)headline models.CharField(max_length255)body_text models.TextField()pub_date models.DateField()# 其他字段省略...def __str__(self):return self.headline假设Entry模型对应的表数据如下 # 要选择所有包含 2008 年至少一个标题中有 Lennon 的条目的博客满足两个条件的同一条目Blog.objects.filter(entry__headline__containsLennon, entry__pub_date__year2008)
QuerySet [Blog: Beatles Blog]
# 要执行一个更为宽松的查询选择任何只在标题中带有 Lennon 的条目和 2008 年的条目的博客Blog.objects.filter(entry__headline__containsLennon).filter(entry__pub_date__year2008)
QuerySet [Blog: Beatles Blog, Blog: Beatles Blog, Blog: Pop Music Blog]这个结果看起来有点怪官方文档的解释是由于第二个更宽松的查询链接了多个过滤器它对主模型进行了多次连接可能会产生重复的结果。 下面是其他网友的解释可以参考 如果使用多个filter函数单个函数接收单个条件采用链式调用的方式来查询则先过滤第一个查询条件其返回的是QuerySet对象注意由于是跨关联关系查询我们时刻要清除自己检索的是什么这里我们检索的是Blog对象而不是Entry对象所以第一个过滤器返回的QuerySet内包含的也是Blog对象而不是Entry对象。然后在此QuerySet基础上继续跨关联关系查询第二个过滤条件如果返回的Blog对象关联的Entry对象中有满足过滤器条件的Entry则将该Blog对象添加到返回的Queryset中 https://www.cnblogs.com/fu-9/p/14645330.html exclude()
一次 exclude() 调用的条件并不需要指向同一项目。 还是用上面entry的数据。 例如以下查询会排除那些 【关联条目标题包含Lennon 的博客】和【发布于 2008 年的博客】查询结果是空 Blog.objects.exclude(
... entry__headline__containsLennon,
... entry__pub_date__year2008,)
QuerySet []如果要排除【关联条目标题包含Lennon且发布于2008年的博客】查询结果是id为2的blog。 Blog.objects.exclude(
... entry__inEntry.objects.filter(
... headline__containsLennon,
... pub_date__year2008,
... ),
... )
QuerySet [Blog: Pop Music Blog]