Как создать псевдоним составного значения из 2 полей в методе values_list объекта objectmanager? - PullRequest
1 голос
/ 31 января 2020

Я пытаюсь создать действительно простую форму, которая позволяет пользователю выбрать активного пользователя из списка выбора и передать этот выбор бэкэнду. Вот мой код:

class PeerReviewColleagueSelectionForm(forms.Form):
    ACTIVE_COLLEAGUES = CustomUser.objects.filter(is_active=True)\
        .values_list('id', full_name=F(('first_name') + ' ' + F('last_name')))\
        .order_by('full_name').annotate(Count='id')
    colleague = forms.ChoiceField(label='selecteer collega', tuple=ACTIVE_COLLEAGUES)

Я пытаюсь получить список tuples, который может использоваться виджетом ChoiceField для отображения всех доступных активных коллег на выбор.

Я пытаюсь создать псевдоним full_name из полей first_name и last_name в CustomUser. Затем я хочу упорядочить результаты по этому псевдониму и использовать аннотирование (количество) для группировки по идентификатору (поскольку я знаю, что каждый идентификатор уникален, и я хочу, чтобы кортежи состояли из (id, full_name,)

Однако, когда я пробую это throws: TypeError: values_list() got an unexpected keyword argument 'full_name'

Как я могу создать кортеж на основе идентификатора и псевдонима с именем full_name?

1 Ответ

0 голосов
/ 31 января 2020

К сожалению, values_list() не принимает аргументы ключевых слов выражения. Поэтому вы должны сначала аннотировать новое поле:

CustomUser.objects.filter(is_active=True)
    .annotate(full_name=Concat('first_name', Value(' '), 'last_name') 
    .values_list('id', "full_name")
    .order_by('full_name')

Обратите внимание, что вы можете использовать Concat функцию базы данных для выполнения конкатенации строк.

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