У меня есть такая форма:

class PasswordForm(forms.Form):

    CHOICES=[('uppercase','Uppercase'),
            ('lowercase','Lowercase'),
            ('numbers','Numbers'),]

    password_length = forms.ChoiceField(choices=[(x, x) for x in range(1, 32)],)
    options = forms.MultipleChoiceField(
                     widget=forms.CheckboxSelectMultiple, choices=CHOICES,)

Как я могу настроить в шаблоне поля для флажков?
Я знаю, как это сделать с другими полями, например forms.Charfield() или моим password_length, просто

<form action="" method="post">
    {{form.some_field}}
</form>

Но это не работает с моим MultipleChoiceField, я пробовал много чего, например
{{form.uppercase}}, {{form.options.choices.uppercase}} и попробовал цикл {% for %}.
он просто ничего не возвращает, и я не вижу его в html через инспектор браузера.

6
Ivan Semochkin 5 Янв 2016 в 11:06

2 ответа

Лучший ответ

Вы должны записать эти параметры как поля формы:

class PasswordForm(forms.Form):
    uppercase = forms.CharField(widget=forms.CheckboxInput())
    lowercase = forms.CharField(widget=forms.CheckboxInput())
    numbers = forms.CharField(widget=forms.CheckboxInput())
    password_length = forms.ChoiceField(choices=[(x, x) for x in range(1, 32)],)

А затем отобразите форму в шаблоне и в шаблоне:

{{ form.uppercase }}

Покажет

<input name="uppercase" type="checkbox">
2
doniyor 5 Янв 2016 в 22:26
 <!-- With for-cycle: -->
{% for field in form %}
  {% for choice_id, choice_label in field.field.choices %}
    {{choice_id}}
    {{choice_label}}
  {% endfor %}
{% endfor %}

<!-- And my end version, where I edited only certain field. -->
{% for field in form %}
  {% if field.name == "your-field-name-here"%}
       <p><strong>{{field.name}}: </strong></p>
       {% for choice_id, choice_label in field.field.choices %}
                <input type="checkbox" name="category" value="{{choice_id}}" style="display:inline;">{{choice_label}}
      {% endfor %}
   {% else %}
       <p>{{ field.errors }}<label style="display:table-cell;">{{field.name}}: </label>{{ field }}</p>
   {% endif %}
{% endfor %}

<!-- If you want to edit all fields with options: {% if field.choices %} -->
3
Varje 28 Авг 2017 в 17:03