django - Django中的复杂过滤/子查询
问题描述
我有以下型号:
class CrewMember(models.Model):
crew = models.ForeignKey(Crew, on_delete=models.PROTECT, related_name="members")
user = models.ForeignKey(User, on_delete=models.PROTECT)
foreman = models.BooleanField()
class Crew(models.Model):
crew_type = models.CharField(max_length=16)
class Job(models.Model):
job_number = models.CharField(max_length=32)
class FieldData(models.Model):
user = models.ForeignKey(User, on_delete=models.PROTECT)
date = models.DateField()
job = models.ForeignKey(Job, on_delete=models.PROTECT)
crew = models.ForeignKey(Crew, on_delete=models.PROTECT)
data = models.TextField()
本质上,工作中的员工可以创建字段数据条目。此外,每个员工团队都有一个或零个领班(因此crew.members.filter(foreman=True)
总是最多返回一个结果。
我需要做的是,给定一个特定的Job
实例,获取FieldData
由当天作为工作组领班的用户创建的所有实例。例如,像这样:
FieldData.objects.filter(job=some_job, user=<SOMETHING>)
匹配的用户在哪里:
theFieldDataInstance.crew.members.get(foreman=True).user
关于如何做到这一点的任何想法?
解决方案
您可以创建一个查询,如
first_query=FieldData.objects.filter(job=some_job, crew__foreman=True).user
second_query=FieldData.objects.filter(user=first_query)
#after this if you want user you can just do secondquery.user
由于 CrewMember 有一个属性 foreman,它是 FeildData 类的外键,该类具有一个属性 crew,您可以将查询分成两部分并按上述方式处理它。
推荐阅读
- javascript - 如何在反应组件中显示 API 数据?
- json - 无法使用火花提交读取本地 JSON 文件
- java - Netbeans 11 未检测到带有 JDK 12 的 JavaFX 应用程序的依赖项
- tensorflow - 了解训练期间的输出 - 持续时间是什么意思以及 TF 在两个时期之间做什么?
- docker - 动态应用完成选项
- javascript - 如何将图像放在圆形图上
- gams-math - 在 GAMS 中比较两个参数是否相同
- scroll - Flutter:使用 SingleChildScrollView 滚动时如何更改状态栏颜色
- javascript - 我无法使用 page.goto() 从一个页面转到另一个页面 - Puppeteer
- r - 用另一个向量的最小值创建向量 [R]