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)





参考 : How to render a Django form with RadioSelect without getting a checked radiobutton by default? - Stack Overflow