[Solved]-What is the usage of `FilteredRelation()` objects in Django ORM (Django 2.X)?

10๐Ÿ‘

โœ…

I think the documentation itself self-explanatory.

You could achieve the same result in,
Method-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')

Method-2

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

You will get better performance with Method-1 since the filtering in the WHERE clause of the first queryset will only operate on vegetarian pizzas.


UPDATE

The Django #29555 ticket has more information regarding the usage and performance.

The FilteredRelation() not only improves performance but also creates
correct results when aggregating with multiple LEFT JOINs.

๐Ÿ‘คJPG

Leave a comment