web-dev-qa-db-ja.com

DjangoテンプレートでChoiceFieldオプションをレンダリングする

DjangoでChoiceFieldが与えられた

fruits = ChoiceField(label="Fruits", choices=(('A', 'Apple'),
    ('B', 'Banana'), ('C', 'Cherry')
)

Django 1.9のテンプレートでフォームオプションを表示するにはどうすればよいですか?たとえば、次のことを試しましたが、フォームデータを表示できません。

    <table class="table table-bordered table-condensed">
      <tr>
      <th>
        <label for="{{form.fruits.id_label}}">  
          {{form.fruits.label}}
        </label>
      </th>
      <td>{% for value, displayable in form.fruits.choices %}
            <option value="{{value}}">{{displayable}}</option>
          {% endfor %}
      </td>
      </tr>
    </table>
8
bryanblackbee

デフォルトでは、Djangoは、選択フィールドの視覚的表現として単純なドロップダウンリストを提供します。ビューにフォームのインスタンスを作成して、コンテキストに渡します。ここに例です、

モデルの例は、

gender = (
    ('x', 'Male'),
    ('y', 'Female'),
    )

class User(models.Model):
      gender = models.CharField(max_length=60, blank=True, default='',choices=gender,verbose_name="gender")

そして私たちのモデルフォーム、

class UserForm(forms.ModelForm):

    def __init__(self, *args, **kargs):
        super(UserForm, self).__init__(*args, **kargs)

    class Meta:
         model = User
         fields = '__all__'

ビューにフォームのインスタンスを作成し、コンテキストに渡します。

def my_view(request):
form = UserForm()
return render_response('template.html',{'form': form})

次に、{{form.my_choice_field}}を使用してテンプレートに表示します。

<div class="col-md-4">
    <div class="form-group">
    <label>Gender</label>
    <select name="gender" class="selectpicker" data-title="Select Gender" data-style="btn-default btn-block" data-menu-style="dropdown-blue">
    {% for x,y in form.fields.gender.choices %}
       <option value="{{ x }}"{% if form.fields.gender.value == x %} selected{% endif %}>{{ y }}</option>
    {% endfor %}
    </select>
  </div>  
</div>
9