考虑以下模型:
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()
函数行为存在差异?
答案 0 :(得分:1)
您可以在以下值之后使用过滤器:
Product.objects.values('name', 'provider__name', 'customer__name').filter(provider__name__isnull=False)
我不是百分百肯定但是试一试!和lemme知道!