CheckboxSelectMultipleフィールドがありますが、単一の選択肢を反復処理できないのはなぜですか?
これは機能しません:
{%for choice in form.travels.choices%}
{{choice}}
{%endfor%}
指定{{choice.0}}
しても役に立ちませんが、どうすればこれを行うことができますか?
ありがとう
CheckboxSelectMultipleフィールドがありますが、単一の選択肢を反復処理できないのはなぜですか?
これは機能しません:
{%for choice in form.travels.choices%}
{{choice}}
{%endfor%}
指定{{choice.0}}
しても役に立ちませんが、どうすればこれを行うことができますか?
ありがとう
テンプレート内では、travels
フィールドは実際にはのインスタンスですBoundField
(これは、フィールドとレンダリング用の値をバインドするDjangoオブジェクトです)。これは、プロパティが多少異なることを意味します。
タプルとして選択を繰り返すには:
{% for choice in form.travels.field.choices %}
{{ choice }} -
{% endfor %}
Produces: (1, 'One') - (2, 'Two') -
選択タプルの要素を個別に繰り返すには、次のようにします。
{% for choice_id, choice_label in form.travels.field.choices %}
{{ choice_id }} = {{ choice_label }} <br/>
{% endfor %}
Produces: 1 = One
2 = Two
お役に立てば幸いです。とは言っても、これを行う必要がある状況はわかりません。表面的には、あまりジャンゴのようには見えません。カスタムフォームフィールドまたはカスタムテンプレートタグを使用すると、ビューコードとテンプレートコードの間のdjangoの意図された分離をより適切に維持する、より移植性が高く再利用可能な実装が得られる場合があります。もちろん、YMMVとは、この場合、直接反復アプローチが適切である可能性があります。
選択フィールドを持つ Form.ModelForm がある場合は、単純なテンプレート フィルターを使用してテンプレート内でそれを繰り返すことができます。
フォーム.py
STATE_CHOICES = (
(10, 'NO'),
(4, 'YES'),
(18, 'Send to another Chemist for Review'),
(34, 'Send to another Market Expert for Review'),
(20, 'HOLD'),
)
new_state = forms.ChoiceField(
choices=STATE_CHOICES,
required=True,
)
テンプレート:
{{ business_manager_form.new_state|filter_project_states:project }}
ここにフィルター自体があります。
@register.filter()
def filter_project_states(argv, project):
if project.department.id != 4:
argv.field.choices = [choice for choice in argv.field.choices if choice[0] != 34]
return argv
これが役立つことを願っています。