這一直在推動我堅果,我無法得到它的工作。這是一個簡單的場景:我想向用戶展示一個動態生成的用戶列表,我從數據庫中提取用戶可以從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中呈現?我在這裏錯過了什麼真正簡單的事情?或者,我是否會以完全錯誤的方式進行討論?
謝謝,埃斯特班。您的第一個建議無效,因爲我需要每次動態查詢。然而,ModelChoiceField做了詭計,因爲我可以通過查詢。耶!所以這是另一個問題。我回來的用戶列表在用戶名處呈現。如何將ChoiceField渲染爲'Last_name,First_name'?我是否應該遍歷模板中的form.user_choice以提取名字和姓氏? – nucklehedd
我相信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
感謝您的建議。我構建了一個自定義的「ModelChoiceField」,並且工作得很好。 – nucklehedd