考虑以下模型:
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/