首页 > 解决方案 > 用于具有多个左连接的 SQL 查询的 Django ORM

问题描述

我有一个 SQL 查询,我试图将其作为 Django ORM,尝试了很多方法,但没有得到确切的解决方案。

select c.* from product p 
left join voucher v on v.id = p.voucher_id
left join customer c on c.id = v.customer_id
where p.id=3;

Django 模型是,

class Customer(models.Model):
    customer_name = models.CharField(max_length=200, default="", db_index=True)
   mobile = models.IntegerField(default='')

class Voucher(models.Model):
    voucher_name = models.CharField(max_length=100, default='')
    customer = models.ForeignKey(Customer,db_index=True)

class Product(models.Model):
    product_name = models.CharField(max_length=100, default='')
    rate = models.FloatField(max_length=50)
    voucher = models.ForeignKey(Voucher, db_index=True)

标签: pythonsqldjangoormdjango-queryset

解决方案


需要使用select_related

甲骨文:Product.objects.filter(id=3).select_related('voucher__customer')

select_related通过创建 SQL 连接文档来工作


推荐阅读