2012-12-11 24 views
0

這一直在推動我堅果,我無法得到它的工作。這是一個簡單的場景:我想向用戶展示一個動態生成的用戶列表,我從數據庫中提取用戶可以從ChoiceField中選擇一個用戶(呈現爲HTML選擇)並單擊「獲取數據」按鈕。如何將查詢的數據綁定到視圖中的Django表單並將其呈現在模板中?

我不想在表單中創建用戶列表,因爲新用戶會一直出現。我想查詢我的視圖中的用戶並將該用戶列表綁定到表單,以便始終可以呈現最新的用戶列表。因此,這裏是我的形式:

class ViewUsersForm(forms.Form): 
    user_choice = forms.ChoiceField() 

這是我的觀點:

from django.contrib.auth.models import User 
from mystuff.forms import ViewUsersForm 

def site_admin_view_user_groups_page(request): 
    if request.method == 'POST': 
    <...handling POST for this question is unimportant...> 
    else: 
    users = User.objects.all() 
    data = {'user_choice': users} 
    form = ViewUsersForm(data) # binding the list of users here 

    variables = RequestContext(request, {'form': form,}) 
    return render_to_response('school/admin/view_user_groups_page.html', variables) 

最後,這裏就是我的渲染到模板:

<form action="/site/viewusers/" method="post">{% csrf_token %} 
    {{ form.user_choice }} 
    <button type="submit" name="getDataButton">Get Data</button> 
</form> 

所以,當模板呈現綁定窗體(窗體= ViewUsersForm(數據)),ChoiceField出現空白。如何獲取ChoiceField中的數據以在我的HTML中呈現?我在這裏錯過了什麼真正簡單的事情?或者,我是否會以完全錯誤的方式進行討論?

回答

1

ChoiceField將'2個元組的可迭代(例如,列表或元組)作爲該字段的選項。'所以,你需要設置你的選擇爲((值,「名1」),(值2,「名2」),()) https://docs.djangoproject.com/en/dev/ref/forms/fields/#django.forms.ChoiceField

您也可以使用ModelChoiceField使用您的查詢集原樣 https://docs.djangoproject.com/en/dev/ref/forms/fields/#django.forms.ModelChoiceField

+0

謝謝,埃斯特班。您的第一個建議無效,因爲我需要每次動態查詢。然而,ModelChoiceField做了詭計,因爲我可以通過查詢。耶!所以這是另一個問題。我回來的用戶列表在用戶名處呈現。如何將ChoiceField渲染爲'Last_name,First_name'?我是否應該遍歷模板中的form.user_choice以提取名字和姓氏? – nucklehedd

+0

我相信unicode方法會被標籤調用。如果還沒有指定,可以將__unicode__方法添加到模型中,以便返回'%s,%s'%(self.last_name,self.first_name)。 如果這不起作用,你總是可以覆蓋表單域: http://stackoverflow.com/questions/3167824/change-django-modelchoicefield-to-show-users-full-names-rather-than-usernames – Esteban

+0

感謝您的建議。我構建了一個自定義的「ModelChoiceField」,並且工作得很好。 – nucklehedd

相關問題