Нужен небольшой совет по оптимизации запросов к БД - PullRequest
0 голосов
/ 18 апреля 2019

Вопрос касается оптимизации кода, а точнее - оптимизации запросов по БД:

…
…
…

filter1 = Comment.objects.filter(foreignkey_to_model1__author=self.request.user,
                                 is_active=True)
filter2 = Comment.objects.filter(foreignkey_to_model2__author=self.request.user,
                                 is_active=True)
context["comments_by_user"] = filter1.union(filter2)[: 5]
return context

Мне кажется, что этот код - отстой, так как он состоит из 2 запросов + слайса вместо фильтра на уровне БД. Вопрос - есть ли шанс красиво упаковать его в 1 запрос, чтобы уменьшить нагрузку на БД? (и сделать этот код менее отстойным…) Спасибо

1 Ответ

2 голосов
/ 18 апреля 2019

Попробуйте это:

from django.db.models import Q

filter = Comment.objects.filter(
    Q(foreignkey_to_model1__author=self.request.user) | 
    Q(foreignkey_to_model2__author=self.request.user),
    is_active=True
)[:5]
...