如何将查询的数据绑定到视图中的Django表单并在模板中呈现它?

时间:2012-12-11 03:53:46

标签: data-binding django-forms django-views

这让我疯了,我无法让它发挥作用。这是一个简单的场景:我想向用户显示我从数据库中提取的动态生成的用户列表,以便用户可以从ChoiceField中选择一个用户(呈现为HTML选择)并单击“获取数据”按钮。

我不想在表单中创建用户列表,因为新用户会一直出现。我想在我的视图中查询用户并将该用户列表绑定到表单,以便始终呈现最新的用户列表。所以这是我的表格:

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>

因此,当模板呈现绑定表单(form = ViewUsersForm(data))时,ChoiceField将显示为空。如何获取ChoiceField中的数据以在我的HTML中呈现?我在这里错过了什么非常简单的事情?或者我是以完全错误的方式解决这个问题?

1 个答案:

答案 0 :(得分:1)

ChoiceField采用'可迭代(例如,列表或元组)的2元组作为该字段的选择。因此,您需要将您的选择设置为((value1,'name1'),(value2,'name2'),()) 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