カスタムwidgetを作って、Fieldに適用してみる
大抵はプリセットのwidgetでこと足りるし、工夫次第でどうにでもなるが、一応メモとして残しておく。
まずFieldのwidget変更
forms.ModelMultipleChoiceField(MyModel.objects.all(), widget=forms.CheckboxSelectMultiple())
こんな感じで、コンストラクタにwidgetキーワードパラメータを指定すればいい
次にカスタムwidgetの作成
簡単な変更であれば、widgetのコンストラクタにキーワードパラメータを指定すればいい。
たとえばHTMLタグのAttribute追加、エラー表示のCSSクラスの追加など。
ただHTMLタグの構造そのものを変えたい場合には手を加える必要がある。
(よく考えれば、小窓を使うとか、AJAXとFloadDIVを使うとか、
簡単なやり方はもっと他にあるかもしれない。
カスタムWidgetを作る前に、一度考え直して見るのがいい。
私みたいに作った後で、軽く反省する羽目になる。)
表示するHTMLタグを変更する場合は変更元のWidgetを継承し、renderメソッドをオーバーライドする。
継承元のrenderメソッドを見れば分かるが、renderメソッドのreturn値は、必要に応じてforce_unicodeで変換しつつ、conditional_escapeしmark_safeする。django.utils.safestringやdjango.utils.encoding、django.utils.htmlあたりにメソッドがあるのでimportして使うといいらしい。
実際に作ったコードを、サンプルとして載せようかと思ったけど、
一番いいサンプルは継承元にあるので、それを参考にするのがベター。
最終更新:2013年01月03日 09:35