ユーザが選択された場合に、そのユーザに選択肢のあるアクションを適用するユーザとチェックボックスのリストを含むページを作成します。私は表に記載されているユーザーがいると私は、この表の最後の列は、これらのチェックボックスになりたい私のテンプレートではテンプレート内でdjangoフォームフィールドをレンダリングする方法
#in forms.py
class UserSelectionForm(forms.Form):
"""form for selecting users"""
def __init__(self, userlist, *args, **kwargs):
self.custom_fields = userlist
super(forms.Form, self).__init__(*args, **kwargs)
for f in userlist:
self.fields[str(f.id)] = forms.BooleanField(initial=False)
def get_selected(self):
"""returns selected users"""
return filter(lambda u: self.fields[str(u.id)], self.custom_fields)
: 私はこのようになりますフォームクラスを作成しました。名前に応じてフィールドを1つずつレンダリングする必要があります。 私は必要なフォーム要素のHTMLコードを返すテンプレートタグを作成してみました:
#in templatetags/user_list_tags.py
from django import template
register = template.Library()
#this is django template tag for user selection form
@register.filter
def user_select_field(form, userid):
"""
returns UserSelectionForm field for a user with userid
"""
key = std(userid)
if key not in form.fields.keys():
print 'Key %s not found in dict' % key
return None
return form.fields[key].widget.render(form, key)
は最後に、ここではテンプレートのコードは次のとおりです。
<form action="" method="post">
{% csrf_token %}
<table class="listtable">
<tr>
<th>Username</th>
<th>Select</th>
</tr>
{% for u in userlist %}
<tr>
<td>{{u.username}}</td>
<td>{{select_form|user_select_field:u.id}}</td>
</tr>
{% endfor %}
</table>
<p><input type="submit" value="make actions" /></p>
しかし、これはにそれらのウィジェットを結合しませんフォームを送信した後、検証は失敗します。エラーメッセージには、すべてのカスタムフィールドが必要であることが示されています。 だからここに私の質問は以下のとおりです。
別のフォームフィールドをレンダリングするための正しい方法は何ですか?
このようなフォームをチェックボックスで作成する正しい方法は何ですか? (私は多分意味、私の方法はばかげていると私は何をしたい達成するための非常に簡単な方法があります。
多分あなたは少しのjavascriptでこれをやってみるべきです。 – unni
私はこの段階で自分のプロジェクトでjavascriptを使いたくなかった。しかし、私は正確に何をすべきですか?または私は何をgoogleする必要がありますか?あなたは私が巨大なjavascriptではないことを知っている=) –