python - 如何在不使用 for 循环的情况下对多对多字段应用过滤器
问题描述
我模型就像
class Company(models.Model):
name = models.CharField(max_length=400, blank=True, null=True)
class Intership(models.Model):
company = models.ForeignKey(Company)
location = models.CharField(max_length=400, blank=True, null=True)
class Student(models.Model):
name = models.CharField(max_length=400, blank=True, null=True)
intership = models.ManyToManyField(Intership,null= True, blank=True)
我期待着所有在一家名为“xyz”的公司实习的学生。
我有代码
company_name = "xyz"
stds
for student in students:
interships = student.intership.all()
for intership in interships:
if intership.company.name == company_name:
stds.append(student)
是否有可能在一个查询中获得所有这些?
解决方案
您可以只过滤Student
s 本身:
Student.objects.filter(intership__company__name='xyz')
您可能想在.distinct()
这里使用,否则Student
同一公司的多个实习将被多次列出:
Student.objects.filter(intership__company__name='xyz').distinct()
注意:是,不是。
internship
intership
推荐阅读
- node.js - User.findOne() 函数未从调用数据库返回
- java - 如何根据 RecyclerView 中单击的项目在新 Activity 中打开特定的 Fragment
- amazon-web-services - 如何计算短期文件的 S3 定价?
- c# - 从 C# 在 PHP 中解码 GZIP 流
- python - 如何抓取多个网址?
- python-3.x - 异常结束时如何返回尝试脚本
- c# - 依赖注入,具有自定义和简单对象的构造函数
- gradle - 预期 java.lang.string,找到 kotlin.string。intellij中的kotlin gradle错误
- django - Django 在 html 聚合中渲染
- javascript - 为什么当我尝试从中获取值时我的对象未定义