Djangoで管理画面のフォームManytoManyFieldをカスタマイズする

Djangoで管理画面のフォームManytoManyFieldをカスタマイズする

LINEで送る
Pocket

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

 

これでカスタマイズされたフォームが表示されます。

LINEで送る
Pocket

フロントエンド開発でお困りのことはありませんか?

フロントエンドの開発支援を行っています。

・Reactの開発をお願いしたい

・コーディング作業を依頼したい

・javascriptライブラリを作って欲しい。

上記以外にも何かありましたらお気軽にお問い合わせください。

コメントを残す