簡體   English   中英

我如何在 object_manager 的 values_list 方法中為 2 個字段的復合值設置別名?

[英]How do i alias a composite value of 2 fields inside the values_list method of object_manager?

我正在嘗試創建一個非常簡單的表單,它允許用戶從選擇列表中選擇一個活動用戶並將該選擇提交給后端。 這是我的代碼:

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)

我正在嘗試獲取一個可由 ChoiceField 小部件使用的tuples列表,以顯示所有可用的活動同事以供選擇。

我正在嘗試從 CustomUser 的 first_name 和 last_name 字段創建一個名為full_name的別名。 然后我想按該別名對結果進行排序,並使用 annotate(count) 按 id 分組(因為我知道每個 id 都是唯一的,並且我想要由(id, full_name,)組成的元組

但是,當我嘗試此操作時,它會拋出: TypeError: values_list() got an unexpected keyword argument 'full_name'

如何根據 id 和名為 full_name 的別名創建元組?

不幸的是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數據庫函數來執行字符串連接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM