【问题标题】:How to use inner join in Django query set如何在 Django 查询集中使用内连接
【发布时间】:2020-09-07 19:45:23
【问题描述】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-06-26
      • 2016-01-22
      • 1970-01-01
      • 1970-01-01
      • 2022-01-14
      • 1970-01-01
      • 2020-07-17
      • 1970-01-01
      • 2019-08-05
      相关资源
      最近更新 更多