【Django】models.py:def __str__(self)とは?使用方法と管理画面での表示について
2020.08.06 /
この記事は、DjangoでWebアプリケーションを作成している方を対象としております。
Djangoでは、データベースを直接扱わなくてもいいようにmodels.pyを使用します。
データベースへのアクセスをmodels.pyに記述されているクラスを操作することで、非常に簡単にデータベースを操作できます。
そのmodels.pyのモデル(オブジェクト)内には、def __str__(self)の記載があります。
これはどういった役割をモデルの中で行っているのか。
girlsチュートリアルなどでは詳しい説明がなかったので、ここではdef __str__(self)について解説してみたいと思います。
def __str__(self)とは
まず結論からお伝えすると、
def __str__(self)により、管理画面に表示されるモデル内のデータ(レコード)を判別するための、名前(文字列)を定義することができます。
def __str__(self)がない場合、管理画面の表示から、データを判別することができないため、管理が難しくなります。
後述する実際の表示画面を見て、どのように変化するのか確かめてください。
models.pyでのdef __str__(self)設定方法
models.pyでのdef __str__(self)の設定方法を解説します。
models.py内でモデル、フィールドの定義ができたら、そのモデル内に以下のようにdef__str__(self)を追記します。
from django.db import models
from django.utils import timezone
class Post(models.Model):
title = models.CharField(max_length=200)
text = models.TextField()
created_date = models.DateTimeField(default=timezone.now)
def __str__(self):
return self.title
上記サンプルでは、Postモデル内にtitle、text、created_dateフィールドを定義しており、def __str__(self)内では、titleフィールドを返すようにしています。
このreturnで設定するフィールド項目が管理画面でそのデータ(レコード)を判別できるように表示されます。
selfは、そのオブジェクト自身を指しております。
管理画面での表示
それでは管理画面でどのように表示されるのか見ていきましょう。
まず__str__(self)がない場合ですが、以下のように表示されるため、Postモデル内のデータを判別することができません。
次に__str__(self)をmodels.pyに追記した画面です。
以下画面表示を見ると、Postモデルのタイトルフィールドが表示されているので、どのデータが何なのか判別が簡単になりました。
まとめ
このようにmodels.pyに__str__(self)を指定するのは、管理画面でデータの判別をしやすくするという重要な役割があります。
今回はサンプルでtitleフィールドを表示するようにしましたが、別のフィールドを指定するのもできます。
ですが、判別できるように表示するフィールドは、他のデータと被らない一意なものであるのが望ましいです。