2013-08-06 12 views
1

我想在Django-forms中設置複選框(BooleanField)的值。這些值是用戶的名稱,因此是可變的。所以,設置默認值不是一個選項。如何在Django中設置複選框的值

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

如何SOLV這是嗎?

回答

0

你應該重新考慮你的方法。你的表單中的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