小工具知识网

当前位置: 首页 > 行业知识 > 【Django】执行查询—跨关系查询中的跨多值关联问题

行业知识

【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,...     ),... )

上一篇:服务器玩家编号怎么看?

下一篇:怎么顺着服务器找人聊天?