Как используются объекты FilteredRelation () в Django ORM (Django 2.X)? - PullRequest
1 голос
/ 28 марта 2019

Я видел, что Django 2.0 состоит из FilteredRelation объекта в наборе запросов.Какая польза от недавно представленного FilteredRelation?

Что я изучал?

Я наблюдал Документация Django 2.0 , но я не мог понять идею этого FilteredRelation объект.

Я посмотрел следующий код.Но я не понял.

>>> from django.db.models import FilteredRelation, Q
>>> Restaurant.objects.annotate(
...    pizzas_vegetarian=FilteredRelation(
...        'pizzas', condition=Q(pizzas__vegetarian=True),
...    ),
... ).filter(pizzas_vegetarian__name__icontains='mozzarella')

Основной вопрос

Покажи сейчас мой вопрос: что такое использование FilteredRelation и когда использовать в вашем QuerySet?

1 Ответ

4 голосов
/ 28 марта 2019

Я думаю, что сама документация не требует пояснений.

Вы можете достичь того же результата в,
Метод-1

from django.db.models import FilteredRelation, Q

result_1 = Restaurant.objects.annotate(pizzas_vegetarian=FilteredRelation('pizzas', condition=Q(pizzas__vegetarian=True), ), ).filter(
    pizzas_vegetarian__name__icontains='mozzarella')

Метод-2

result_2 = Restaurant.objects.filter(pizzas__vegetarian=True, pizzas__name__icontains='mozzarella')


Вы получите лучшую производительность с Метод-1 , поскольку фильтрация в WHERE Предложение первого набора запросов будет работать только для вегетарианской пиццы.


ОБНОВЛЕНИЕ

Django # 29555 Билет содержит больше информации об использовании и производительности.

FilteredRelation() не только повышает производительность, но и создает правильные результаты при агрегировании с несколькими LEFT JOIN с.

...