首页 > 解决方案 > 如何在 Django 查询集中使用内连接

问题描述

我在 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

标签: joindjango-modelsdjango-queryset

解决方案


老实说,我认为应该修改您的模型,以便外键驻留在 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.

希望对您有所帮助,祝您编码愉快!


推荐阅读