【发布时间】:2020-02-01 18:29:47
【问题描述】:
我已经浏览了关于 Django 和 LEFT JOIN 问题的无尽帖子,但没有找到任何人在 2.2 版本的 Django 中提供解决方案。虽然在过去的几年里似乎有办法解决这个问题,但 Django 团队似乎已经关闭了人们用来实现最简单但必要的查询的所有机制——左连接。 这是我正在尝试做的一个简单的示例(这是一个反映现实世界场景的简单示例,因此请不要提供重新设计模型的方法.. . 我想要的只是 SQL 中古老的 LEFT JOIN .... 就这么简单):
from django.db import models
from uuid import uuid4
class People(models.Model):
id = models.UUIDField(primary_key=True, editable=False, default=uuid4)
name = models.CharField(max_length=255)
class Book(models.Model):
id = models.UUIDField(primary_key=True, editable=False, default=uuid4)
name = models.CharField(max_length=255)
author = models.ForeignKey(People)
publisher = models.ForeignKey(People, on_delete=models.PROTECT, null=True)
我将如何获得显示所有书籍和出版商如果有出版商的输出(否则只是空白)
Books.objects.filter(Q(publisher__isnull=True | Q(publisher__isnull=False)
... 产生一个 INNER JOIN 显然只会显示分配了出版商的书籍。 我正在寻找的查询将是以下形式: select * from book LEFT JOIN people ON book.publisher_id=people.id
... 还是我必须求助于原始 SQL 来满足这个最简单的要求?
【问题讨论】: