Djangoのadmin管理画面では、modelsの__str__()(読み方:ストリングメソッド)を使用することで、視認性を向上させることができるのはご存知でしょうか。
本日はそんな__str__()のストリングメソッドをdjangoのmodels.pyに適用して効率化させる方法を紹介していきます。
コンテンツ
環境
・Python 3.8
・Django 3.2
ゴール
最終的にどんなコードを書いて、どのような表示にさせるのか、ゴールを先に説明します。
例としてサイトでInformation(お知らせ)のmodelのテーブルを利用したものがあると想定します。
Informationテーブルにオブジェクトをいくつか作成し、Djangoのadmin管理サイト(通常はhttp://127.0.0.1:8000/admin)で確認すると以下のように表示がされます。
()で囲まれたユニークキーはかろうじてわかりますが、全てのデータはInformation objectと表示され中身がわかりません。
しかしながら__str__()のストリングメソッドを使用することで以下のように表示を変えることができます。
ここでは先頭に管理番号を、その次にタイトルを表示できるようにしました。
当記事ではこのようにadmin管理サイトでテーブルをストリングメソッドを使ってわかりやすく表示できるようにしていきます。
そもそも__str__()のストリングメソッドとは
ストリングメソッドは、Python特殊メソッドとも呼ばれPythonが暗黙的に呼び出す特別なメソッドです。
目印としてメソッドの前後には、__のアンダースコアが2つ付いています。
文字で説明してもわからないかもしれませんのでとりあえずコードを書いてみます。
1 2 3 4 5 6 |
class Sample: def __str__(self): return 'ABC' sample = Sample() print(sample) # ABC |
この場合、最後のコメントアウトにある通りstr型のABCがprintされます。
以上を理解している前提で本番ではどのように実装しているのかを次で紹介します。
models.pyの__str__()を設定する
models.py内でのテーブルに定義されたコードの最後に、__str__(self)メソッドを記述し、ここにreturnしたい内容を記入していきます。
先に説明した通り、Informationというテーブルを想定しています。
models.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
from django.db import models class Information(models.Model): """お知らせ """ title = models.CharField( verbose_name='title', max_length=128, null=False, ) description = models.CharField( verbose_name='description', max_length=4096, null=False, ) contributor = models.IntegerField( verbose_name='contributor', null=False, ) release = models.IntegerField( verbose_name='release', null=False, default=Release.DRAFT, ) created_at = models.DateTimeField( verbose_name='created_at', auto_now_add=True, ) updated_at = models.DateTimeField( verbose_name='updated_at', auto_now=True, ) def __str__(self): return f'{self.id}, {self.title}' |
Informationクラスのfieldを書き終えた一番後方に、__str__()のストリングメソッドを記述します。
そしてその時に返す(return)するのはidとtitleなのでそれぞれ指定をして書いています。
1 |
return f'{self.id}, {self.title}' |
これだけ。
ここまで記述できたら、admin管理サイトにアクセスして実際に調べてみてください。
ここまで理解できたらあとは自分が返したい内容を自由に編集して書いてみてください。
admin管理サイトでの視認性がはるかに上がり、管理が効率化されます。
以上。
最後に
いかがでしたでしょうか。
以上が、「【Django】admin管理サイトでmodelを__str__()のストリングメソッドを使ってカスタマイズする」の紹介記事になります。
正直admin管理サイトをいじりはじめるとキリがないのですが、初手として有効な視認性の向上の方法を紹介しました。
是非あなたの運営サイトにも試してみてください。
プログラミング学習を効率良く進めるには…
私ヒロヤンがプログラミングを始めた頃は以下のような感じでした。
そしてネットで調べていくうちに膨大な時間が過ぎていきました。
私ヒロヤンの実体験より、プログラミングを効率的に学ぶために大切なことは以下のことだと考えています。
1. いつまでもダラダラとやらないで、目標を決定して短期集中する
2. マンツーマンで、わからない箇所は直ぐに質問をして即レスをもらう
.proでは私ヒロヤンが学習してきたプログラミング経験0からのpython/django、その他webサイト・サービス開発のコースが用意されています。
カウンセリング自体は無料なので話を聞いてみるだけでもいかがでしょうか?
また以下のリンク先ではdjangoを教えてくれるスクールをまとめ紹介しています。
コメントを残す