1

我有几个在一个方向上一对多的表:

class ShiftGroup(models.Model):
    def getJobType(self):
        ???

class Shift(models.Model):
    shift_group = models.ForeignKey(ShiftGroup, related_name="shifts")

class Run(models.Model): 
    shift = models.ForeignKey(Shift, related_name="runs")

class Job(models.Model):
    run = models.ForeignKey(Run, related_name="jobs", blank=True, null=True)
    job_type = models.ForeignKey(JobType, related_name="jobs")

在我看来,我正在提取 ShiftGroups 的查询集以显示在表中,但我还需要显示 job_type。我知道我可以使用从班次中提取信息

ShiftGroup.shifts.all()

但是有什么办法可以打电话

ShiftGroup.shifts.runs.jobs.job_types

在视图或模板中不需要嵌套 for 循环?

4

2 回答 2

1

你提出的问题没有意义。如您所知,每个 ShiftGroup 有多个班次,每个 Shift 有多个运行,依此类推。因此,对于 ShiftGroup,没有“job_type”之类的东西:有很多。

如果您要求在当前 ShiftGroup 中轮班运行中的作业中的所有 job_types 的列表,那么您应该从 JobType 开始,并使用双下划线语法:

JobType.objects.filter(job__run__shift__shift_group=self)

但同样,这是一个工作类型列表,而不是一个。如果所有这些关系只能在只有一个 jobtype 的情况下结束,那么您的数据建模有问题:也许您应该有一个从 ShiftGroup 到 JobType 的直接 ForeignKey。

于 2013-07-26T01:29:38.397 回答
0

在您的模板中,您可能会执行以下操作:

{% for shift in shiftgroups.shift_set.all %}
  {% for run in shift.run_set.all %}
    {% for job in run.job_set.all %}
      {{ job.job_type }}
    {% endfor %}
  {% endfor %}
{% endfor %}

如果你有很多对象,这可能有点贵。

于 2020-02-27T13:52:56.197 回答