оптимизировать SerializerMethodField в сериализаторе - PullRequest
0 голосов
/ 05 августа 2020

У меня есть такой сериализатор:

class UserSerializerDetail(UserSerializer):
    active_projects = serializers.SerializerMethodField()

    def get_active_projects(self, obj):
        return obj.projects.filter(project__active=True).count()

проблема, с которой я столкнулся, заключается в том, что SerializerMethodField вызывает дополнительный фильтр, и я sh использую select, связанный с созданием соединения и преодоления еще одно попадание в базу данных.

Вторая проблема - как я могу выбрать счетчик select_related?

1 Ответ

1 голос
/ 05 августа 2020

Полагаю, вы имели в виду, что у пользователя много проектов. Отношение 1 ко многим.

Лучшим является сочетание prefetch_related с агрегацией (select_related в основном используется для отношения 1 к 1).

пример:

from django.db.models import Count, Q

projects = User.objects.prefetch_related('projects').annotate(active_projects=Count('projects', filter=Q(projects__active=True)))

Тогда ваш у пользователей теперь есть поле active_projects.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...