Django模型的值()'和LEFT OUTER连接

时间:2011-09-09 18:40:40

标签: 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()函数行为存在差异?

1 个答案:

答案 0 :(得分:1)

您可以在以下值之后使用过滤器:

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

我不是百分百肯定但是试一试!和lemme知道!