如何在Django中设置CheckBoxes的值

时间:2013-08-06 08:16:22

标签: django django-forms

我想在Django-forms中设置复选框(BooleanField)的值。值是用户的名称,因此是变量。因此,设置默认值不是一个选项。

Forms.py

class UserForm(forms.Form):
   user    = forms.BooleanField()        // value set should be of the name of user

Template.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))

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您应该重新考虑您的方法。表单中user字段的含义是什么,以及您希望如何选择具有该字段的用户?最有可能ChoiceField更适用。有关此字段的详细信息,请参阅示例this question

否则,请重命名您的字段以使其更具描述性,例如: 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 cetera