我想在Django-forms中设置复选框(BooleanField)的值。值是用户的名称,因此是变量。因此,设置默认值不是一个选项。
Forms.py
class UserForm(forms.Form):
user = forms.BooleanField() // value set should be of the name of userTemplate.html
{% for user in users %}
{{user_form.as_table}} {{user.name}}
{%endfor%}Views.py
users = GrabhaloUser.objects.all()
user_form = UserForm(request.POST or None)
if request.method == 'POST':
if(user_form.is_valid()):
selected_users = user_form.cleaned_data['user']
#get_data(request,selected_users,query) //this is some function. Ignore this.
ctx = {
'users' : users,
'user_form' : user_form
}
return render_to_response('dashboard/dashboard.html',ctx, context_instance = RequestContext(request))我该怎么解决这个问题?
发布于 2013-08-06 08:56:20
你应该重新考虑一下你的方法。表单中的user字段意味着什么,您希望如何使用它来选择用户?最有可能的是,ChoiceField更适用。有关此字段的详细信息,请参见例如这个问题。
否则,重命名您的字段,使其更具描述性,例如selected。在这种情况下,您必须区分用户,这意味着您必须在表单标识符和名称前加上前缀。换句话说,手动构建表单。举个例子(根据你的具体需要来调整)
{% for user in users %}
<input id="user_pk_{{ user.pk }}" value="{{ user.pk }}" type="hidden" />
<input id="user_selected_{{ user.pk }}" type="checkbox"{% if user.selected %} checked="checked"{% endif %} />
<input id="user_some_property_{{ user.pk }}" type="text" value="{{ user.some_property }}" />
{% endfor %}最后,在您的观点中,获取所有条目并处理它们。同样,例如:
keys = [k for k in user_form.cleaned_data.keys() if k.startswith('user_pk_')]
pks = [pk..rsplit('_', 1)[-1] for pk in keys]
for pk in pks:
user = User.objects.get(pk=pk)
user.selected = user_form.cleaned_data['user_selected_'+pk]
# Et ceterahttps://stackoverflow.com/questions/18074980
复制相似问题