Как применить метод ко всем объектам Queryset'а в форме

Рейтинг: 0Ответов: 1Опубликовано: 14.05.2023

У меня есть Queryset пользователей:

forms.py:

companion_queryset = User.objects.exclude(id=user.id)

И вот мое поле, где нужно выбрать собеседника:

forms.py:

companion = forms.ModelChoiceField(
            label='Собеседник',
            queryset=companion_queryset,
            widget=forms.SelectMultiple(attrs={'class': 'form-control', 'style': 'width: 300px;'}),
            # empty_label='',
            required=True,
            )

По умолчанию у меня в списке пользователи отображаются как электронные почты, а мне надо как First name и Second name - это 2 поля в модели CustomUser, для отображения Имени и Фамилии у меня есть метод get_full_name(), но я не знаю как его применить к каждому объекту Queryset'а.

Ответы

▲ 1Принят

Можно воспользоваться методом annotate и создать для каждого объекта поле full_name затем через values_list получить эти поля.

from django.db.models import Value
from django.db.models.functions import Concat

queryset = User.objects.annotate(
            full_name=Concat('first_name', Value(' '), 'last_name')
            ).values_list('full_name', flat=True)
print(queryset)

у меня в базе 3 пользователя, вывод:

<QuerySet ['Джеймс Бонд', 'Иван Петров', 'Алиса Петрова']>