【Django】models.py:def __str__(self)とは?使用方法と管理画面での表示について

2020.08.06 /

【Django】models.py:def __str__(self)とは?使用方法と管理画面での表示について

この記事は、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フィールドを表示するようにしましたが、別のフィールドを指定するのもできます。

ですが、判別できるように表示するフィールドは、他のデータと被らない一意なものであるのが望ましいです。