ModelFormを継承したフォームを実装する際に、ForeignKeyのフィールドにwidgetとしてforms.RadioSelect
を適用したところ、下図のように未選択のときの項目が「---------」と表示されており、UI的にちょっと変だなと思ったので、それを変更したときの方法です。
※widgetを適用せず、デフォルトのforms.Select
の場合は「---------」でも普通そうですけど。
デフォルトの図
変更後の図
コード
models.py
# -*-coding: utf-8-*-
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=30)
def __unicode__(self):
return self.name
class Article(models.Model):
title = models.CharField(max_length=100)
author = models.ForeignKey(Author)
forms.py
# -*-coding: utf-8-*-
from django import forms
from django.forms import ModelForm
from .models import Article, Author
class ArticleForm(ModelForm):
class Meta:
model = Article
fields = '__all__'
author = forms.ModelChoiceField(
queryset=Author.objects.all(),
widget=forms.RadioSelect,
empty_label='該当なし'
)
説明
forms.ModelChoiceField
にempty_labelで任意の文字列を渡してやればOKです。
author = forms.ModelChoiceField(
queryset=Author.objects.all(),
widget=forms.RadioSelect,
empty_label='該当なし'
)