Djangoの「xxxxxxオブジェクト」表示の管理アクションサイドバーのカスタマイズ


110

管理者が最近変更したサイドバーが追加された「オブジェクト」の名前を表示する方法のデフォルトの動作を変更したいと思います。下の図を参照してください。

最近のアクションモジュールでは、新しいオブジェクトも「MyModelNameオブジェクト」として表示されます

管理者でこれらの名前を変更する方法を教えてください。理想的には、「MyModelNameオブジェクト」から「Policy」オブジェクトの例のように、「Policy:{{ポリシーの「Policy Name」フィールドの値。}}に変更できるようにしたいのです。

__unicode__私の患者モデルはこれを処理したと思っていましたが、表示されないようです。どんな援助でもありがたいです。


1
__unicode__それを行います。問題を確認できるようにコードを貼り付けます
dan-klasson

__unicode__私にとってPython 3では機能しませんでした。しかし、__str__以下の回答に記載されているように機能しました
Dan King

回答:


168

__unicode__それを行います。モデルは次のようになります。

class SomeModel(models.Model):
    def __unicode__(self):
       return 'Policy: ' + self.name

Python 3では、次を使用する必要があります__str__

def __str__(self):
   return 'Policy: ' + self.name

1
私はこれを除いてすべてのモデルにユニコードメソッドを宣言したことに気付かなかった。:doh:すみません。
patrickn

29

__str__メソッドの使用は、Python3およびDjango1.8で機能します。

class MyModel(models.Model):

    name = models.CharField(max_length=60)

    def __str__(self):
        return 'MyModel: {}'.format(self.name)

3
これも私にとって解決しました。私はPython3とDjango1.8も使用しています。
Teodor Scorpan 2015年

strは古い方法です.....まだpython 3とDjango、新しい方法(unicode)は機能しませんか?
user798719

13

__unicode__他の人が述べたように、あなたが見ている文字列はメソッドから来ています。ただし、管理者はログイベントの作成時にオブジェクトの文字列表現を保存するので__unicode__、ログエントリが保存された後に実装を追加すると、新しいアクティビティを行った後にのみ、古いアイテムに新しいタイトルが表示されません。


私がユニコードを設定した後、なぜアクションログが名前を表示しないのか疑問に思っていました-それは、作成時にデータを取得するデータベースに保存されたログにすぎなかったことを知っているはずです!
markwalker_ 2012

2
あなたがそれを説明していなかったら、私に大きな面倒を与えてくれてありがとう
dtc

7

言及__str__した答えと__unicode__方法は正しいです。ただし、ドキュメントに記載されているように、バージョン1.6(私はそう思います)以降 Python 2とPython 3の両方にpython_2_unicode_compatibleデコレーターを使用できます。

from __future__ import unicode_literals
from django.utils.encoding import python_2_unicode_compatible

@python_2_unicode_compatible
class MyClass(models.Model):
    def __str__(self):
        return "Instance of my class"

上記以外のModelオブジェクトでも使用できます。


3

表示する列を定義する必要があります...

例えば:

class POAdmin(admin.ModelAdmin):
    list_display = ('qty', 'cost', 'total')

2

あなたはそれ__unicode__がそうだと考えるのは正しいです。私は今これを実行しています:

class Film(models.Model):
    title = models.CharField(max_length=200)
    ...
    def __unicode__(self):
        return self.title

最近のアクションリストを見ると、編集したばかりの映画のタイトルが表示されています。


2

これは、def str(self)を使用して機能します:self.titleを返します

次のようなものを使用してください:

class Blog(models.Model):
    title = models.CharField(max_length=200)
    def __str__(self):
        return self.title

1

この質問は6年前なので、多くのことが変わっています。それに更新を加えましょう.python3.6と最新バージョンのDjango(2.1.2)では__str__()、常に新しいコードで使用する必要があります。__unicode__()python3 strはであるため、python2.7の古い話ですunicode


0

この方法で__str__()モデルにメソッドを追加することにより Patient

class Patient(models.Model):
name=models.CharField(max_length=200)
#.........
def __str__(self):
    return self.name

オブジェクトではなく患者の名前を表示します。詳細はこちら

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.