Рассмотрим следующие модели:
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()
и избежать ненужной фильтрации полей NULL, вызванной LEFT OUTER join?
Почему существует различие в поведении filter()/values()
функций?