DjanoのRadioSelectで表示される「--------」を表示させず、かつチェック無しで描画する
djangoのModelFormでChoiceFieldの表示にRadioSelectを使い、フィールドにdefaultを指定していないと、「未選択」のためのradioボタンが表示されます。
コードは以下の通り
models.py
from django.db import models FAVORITE_COLORS_CHOICES = (('blue', 'Blue'), ('green', 'Green'), ('black', 'Black')) class Simple(models.Model): favorite_color = models.CharField(choices=FAVORITE_COLORS_CHOICES, max_length=100)
forms.py
from django import forms from .models import Simple class SimpleForm(forms.ModelForm): class Meta: model = Simple widgets = { 'favorite_color': forms.RadioSelect() }
views.py
from django.contrib.formtools.preview import FormPreview from .models import Simple class SimpleFormPreview(FormPreview): def done(self, request, cleaned_data): simple = Simple(**cleaned_data) simple.save() return redirect(reverse('created', args=(), kwargs={}))
formtools/form.html
{% extends "base.html" %} {% block content %} {% if form.errors %}<h1>Please correct the following errors</h1>{% else %}<h1>Submit</h1>{% endif %} <form enctype="multipart/form-data" action="" method="post">{% csrf_token %} <table> {% for field in form %} <tr> <th>{{ field.label }}:</th> <td>{{ field }}</td> <td>{% if field.field.required %}必須{% endif %}</td> </tr> {% endfor %} </table> <input type="hidden" name="{{ stage_field }}" value="1"/> <p><input type="submit" value="Preview"/></p> </form> {% endblock %}
modelで必須指定になってるんで、「-----------」のチェックしてある状態でsubmitするとエラーになります。
この「---------」ですが、models.pyでdefaultを指定しておけば表示されません。
class Simple(models.Model): favorite_color = models.CharField(choices=FAVORITE_COLORS_CHOICES, max_length=100, default='blue')
default=Noneだと、「----------」を表示せず、かつどのラジオボタンもチェックされていない状態で描画されます。
class Simple(models.Model): favorite_color = models.CharField(choices=FAVORITE_COLORS_CHOICES, max_length=100, default=None)