ModelFormでForeignKeyのModelChoiceFieldをカスタマイズ

models.py

class Type(models.Model):
    name = models.CharField(max_length=255)

class Blog(models.Model):
    title = models.CharField(max_length=255)
    contents = models.CharField(max_length=255)
    type = models.ForeignKey(Type)

という場合にBlogのFormクラスを作ろうとして

from django.forms import ModelForm
class BlogForm(ModelForm):
    class Meta:
        model = Blog

とした場合テンプレートに出力されるHTMLが

<select name="type" id="id_type">
    <option value="" selected="selected">---------</option>
    <option value="1">Type object</option>
    <option value="2">Type object</option>
</select>

つまりoptionの中身はType objectじゃなくてType objectのnameになってほしいところなんだけど残念な感じになってしまうので
ModelChoiceFieldを継承してカスタマイズします

from django.forms.models import ModelChoiceField
class CustomChoiceField(forms.ModelChoiceField):
    #ここで表示したい形式にします
    def label_from_instance(self, obj):
        return u'%s' % obj.name

class BlogForm(ModelForm):
    #typeを上で作成したCustomChoiceFieldに変更します
    type = CustomChoiceField(queryset=Type.objects.all())
    class Meta:
        model = Blog

カスタマイズ後のHTMLは

<select name="type" id="id_type">
    <option value="" selected="selected">---------</option>
    <option value="1">hoge</option>
    <option value="2">fuba</option>
</select> 

という感じでTypeオブジェクトのnameの値に変更されています、めでたしめでたし。

でもこういう需要って結構あると思うんだけどわざわざModelChoiceFieldを継承してごにょごにょしてって面倒くさいんだけどフィールドオプションで表示したい形式を指定できればいいのに・・・もしかしてもうあったりするのかな?
知ってる人いたら教えてください。

参考:django.forms.ModelChoiceFieldをカスタマイズ