行业知识
【Django】执行查询—跨关系查询中的跨多值关联问题
2026-10-30 12:16:43
来源:互联网转载
跨多值查询
跨越 ManyToManyField 或反查 ForeignKey (例如从 Blog 到 Entry )时,对多个属性进行过滤会产生这样的问题:是否要求每个属性都在同一个相关对象中重合。
filter()
先看filter(),通过一个例子看:
from datetime import datefrom django.db import modelsclass Blog(models.Model): name = models.CharField(max_length=100) tagline = models.TextField() def __str__(self): return self.nameclass Entry(models.Model): blog = models.ForeignKey(Blog, on_delete=models.CASCADE) headline = models.CharField(max_length=255) body_text = models.TextField() pub_date = models.DateField() # 其他字段省略 ... def __str__(self): return self.headline
假设Entry模型对应的表数据如下
# 要选择所有包含 2008 年至少一个标题中有 "Lennon" 的条目的博客(满足两个条件的同一条目)>>> Blog.objects.filter(entry__headline__contains="Lennon", entry__pub_date__year=2008)# 要执行一个更为宽松的查询,选择任何只在标题中带有 "Lennon" 的条目和 2008 年的条目的博客>>> Blog.objects.filter(entry__headline__contains="Lennon").filter(entry__pub_date__year=2008)>> Blog.objects.exclude(... entry__headline__contains="Lennon",... entry__pub_date__year=2008,)
如果要排除【关联条目标题包含"Lennon"且发布于2008年的博客】,查询结果是id为2的blog。
>>> Blog.objects.exclude(... entry__in=Entry.objects.filter(... headline__contains="Lennon",... pub_date__year=2008,... ),... )
上一篇:服务器玩家编号怎么看?
下一篇:怎么顺着服务器找人聊天?