python - Django 模型 'values()' 和 LEFT OUTER 连接

标签 python django django-models

考虑以下模型:

class Product(models.Model):
    name = models.CharField(max_length=100, blank=False, null=False)

class Provider(models.Model):
    name = models.CharField(max_length=100, blank=False, null=False)
    product = models.ForeignKey(Product)

class Customer(models.Model):
    name = models.CharField(max_length=100, blank=False, null=False)
    product = models.ForeignKey(Product)

当我执行类似于以下的查询时:

Product.objects.values('name', 'provider__name', 'customer__name')

生成的 SQL 使用 LEFT OUTER join 而不是 INNER join。使用 filter 时使用 INNER JOIN。如何使用 values() 并避免 LEFT OUTER 连接引起的不必要的 NULL 字段过滤?

为什么 filter()/values() 函数的行为存在差异?

最佳答案

您可以在值后面使用过滤器,如下所示:

Product.objects.values('name', 'provider__name', 'customer__name').filter(provider__name__isnull=False)

我不是100%确定,但尝试一下!让我知道!

关于python - Django 模型 'values()' 和 LEFT OUTER 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7366049/

相关文章:

Python While 循环条件评估

django 处理 textarea 中的换行符

mysql - Django ORM - 具有不同选择子句的分组聚合

python - Django - 将日期设置为日期输入值

python - Django - 通过表单更新用户实例

python - 无需包的快速矩阵求逆

python - 多图中刻度线的长度相同

python - 使用条件将列表的 pandas 列拆分为多列。

python - Django Rest Framework @detail_route 产生 404

django - 无法在开发模式下启动 Django-Tailwind