Django ORM для SQL-запроса с несколькими левыми соединениями - PullRequest
0 голосов
/ 24 октября 2018

У меня есть 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)

1 Ответ

0 голосов
/ 24 октября 2018

Необходимо использовать select_related

ORM: Product.objects.filter(id=3).select_related('voucher__customer')

select_related работает путем создания SQL-объединения docs

...