1

我想在 Django 表单中设置复选框(BooleanField)的值。这些值是用户的名称,因此是可变的。因此,设置默认值不是一种选择。

表格.py

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

模板.html

{% for user in users %}
  {{user_form.as_table}} {{user.name}}
{%endfor%}

视图.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))

我该如何解决这个问题?

4

1 回答 1

1

您可能应该重新考虑您的方法。表单中的字段是什么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 cetera
于 2013-08-06T08:56:20.047 回答