hiroktsのブログ

IT開発系の勉強会の感想とか雑記とか

Djangoでformsetを使って、セレクトボックスを含むformにchoiceを注入する

これが必要になった理由

エディット画面で、セレクトボックスを持つformを複数個追加したい。
また、その時の選択肢には単純にchoiceにmodelのタイトルを出すのではなく、タイトルが設定されていない場合はmodelがグルーピングしているものをサマリーして出したい。

コード

モデルではstaticmethodで選択肢となる「タイトルのリスト」を作る関数を作っておく。

gist.github.com

formとformsetではとりあえずchoicesを空に

gist.github.com

viewsで作ったタイミングで注入する。理由としては、modelがmigrateされているの前提で処理を作ると最初からDockerなどでビルドするとエラーが出てしまう場合があるから

gist.github.com

やってることはformsetの中身をイテレートするとformをいじれるのでそのときに設定してしまえ、という感じなのですが結構ごちゃっとしてて忘れそうなのでメモ

とりあえず、うまく行きました。 articleやarticle_groupが増えたとしても選択肢に出てきます。