如何在Django查询集中使用内部联接

问题描述 投票:0回答:1

我在model.py中具有以下模型

    class Jobs(models.Model):
     JobNumber=models.CharField()
    CustomerName = models.CharField()

class JobTime(models.Model):
    JobNumber = models.ForeignKey(Jobs, on_delete=models.PROTECT)
    WorkHrs = models.FloatField()
    LabourCost = models.FloatField()

class JobMaterial(models.Model):
    JobNumber = models.ForeignKey(Jobs, on_delete=models.PROTECT)
    MaterialCost = models.FloatField()

我想为Jobs模型中的所有JobNumbers生成一个具有JobNumber,CustomerName,LabourCost,MaterialCost的查询集。请帮助,我使用Django版本:3.0.6和Python版本:3.8.2

join django-models django-queryset
1个回答
0
投票

老实说,我认为您应该修改您的模型,以便外键位于Jobs类中。作业应具有JobTime和JobMaterial,而不是相反。然后,您可以执行以下操作:

class Jobs(models.Model):
    JobNumber=models.CharField()
    CustomerName = models.CharField()
    job_time = models.ForeignKey(JobTime, on_delete=models.PROTECT)
    job_material = models.ForeignKey(JobMaterial, on_delete=models.PROTECT)

Jobs.objects.all().select_related('job_time', 'job_material')

如果您希望job_material成为Jobs上的一对多字段,那么您将使用prefetch_related而不是select_related

希望有帮助,祝您编程愉快!

© www.soinside.com 2019 - 2024. All rights reserved.