首页 > 解决方案 > 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

关于如何做到这一点的任何想法?

标签: djangofilter

解决方案


您可以创建一个查询,如

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,您可以将查询分成两部分并按上述方式处理它。


推荐阅读