Как применить метод ко всем объектам Queryset'а в форме
У меня есть 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 шт):
Автор решения: Maksim Alekseev
→ Ссылка
Можно воспользоваться методом 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 ['Джеймс Бонд', 'Иван Петров', 'Алиса Петрова']>