見出し画像

Django_モデルの値に操作を加えてから管理画面に表示 #307日目

Djangoの管理画面は非常に使い勝手が良いですが、簡単に使える分、ちょっとしたカスタマイズにもコツが必要です。

表示するフィールドの設定方法などは調べてすぐに出てくるのですが、フィールドの値に少し処理を加えてから表示したい場合の方法が中々見つかりませんでした。

しかし実は簡単に定義できます。
weightフィールドにfloat型の数字が入っていると仮定して、それをint型に直した数字を管理画面に表示するコードです

class UserAdmin(admin.ModelAdmin):
    """ユーザー"""

    list_display = ('user_id', 'username', 'email', 'weight', 'round_weight')

    def round_weight(self, instance):
        return int(instance.weight)
    round_weight.short_description = 'int型の体重'   # カラム表示名

list_displayに含まれる「round_weight」は、その下で定義しているround_weight関数です。

round_weight関数の第二引数は対象クラスのインスタンスです。そのためinstance.weightのように記述すれば元のweightフィールドにアクセスできます。

また、ここで新たに作成したカラムにも表示名を設定することができます。round_weight.short_descriptionの部分です。


この他にも管理画面のテンプレートを継承してhtmlを直接編集するという手段もあります。

今回の対応にあたってそちらも検討してみたのですが、ファイルが増えたり、そもそも編集が大変だったりするので、出来るだけ既存の仕組みを活かそうと考えて上記のようにModelAdminの機能を使うことにしました。


ここまでお読みいただきありがとうございました!

参考


この記事が気に入ったらサポートをしてみませんか?