Djangoアプリケーションの管理画面でManyToManyFieldをカスタマイズします。
通常manytomanyFieldはstrで指定した値がセレクトボックスで表示されますが、これをリレーションしたデータなどで表示したい時の解決策です。
フォームを作る
まずは、専用のモデルフォームを作りましょう。
class ArticleForm(forms.ModelForm): def __init__(self, *args, **kwargs): super(ArticleForm, self).__init__(*args, **kwargs) options = [] for cat in Categories.objects.all(): label = cat.id + ': ' + cat.name options.append((cat.id, label)) self.fields['categories'].choices = options class Meta: model = Article fields = ('__all__')
記事とカテゴリーテーブルがあり、多対対の関係です。
self.fieldsに追加したいキーでデータを格納します。
上記の例では、valueにid、ラベルに”1: 日記”このような形でidとカテゴリ名が表示されます。
AdminModelに先ほど作ったフォームを指定する
class ArticleAdminModel(admin.ModelAdmin): form = ArticleForm
これでカスタマイズされたフォームが表示されます。
フロントエンド開発でお困りのことはありませんか?
フロントエンドの開発支援を行っています。
・Reactの開発をお願いしたい
・コーディング作業を依頼したい
・javascriptライブラリを作って欲しい。
上記以外にも何かありましたらお気軽にお問い合わせください。