Модели Django 'values ​​()' и LEFT OUTER join - PullRequest
1 голос
/ 09 сентября 2011

Рассмотрим следующие модели:

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() функций?

1 Ответ

1 голос
/ 09 сентября 2011

вы можете использовать фильтр после таких значений:

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

Я не уверен на 100%, но попробуй! и дай знать!

...