2016-09-01 4 views
1

私のDjango管理パネルはself.nameの代わりにobjectを表示しています。オブジェクトを表示するDjango管理者 - __unicode__と連携していませんOR __str__

私はここでいくつかの同様の質問を行ったが、この問題を解決できないようだ。 __unicode____str__は、書籍と著者の両方で同じ結果になります。私はこれらの行を変更し、すべての変更に新しい著者/書籍を追加しましたが、変更はありません。

MODELS.PY

from django.db import models 
from django.contrib.auth.models import User 


# Create your models here. 

class Author(models.Model): 
    name = models.CharField(max_length=100) 


def __str__(self): 
    return self.name 


class Book(models.Model): 
    auto_increment_id = models.AutoField(primary_key=True) 
    name = models.CharField('Book name', max_length=100) 
    author = models.ForeignKey(Author, blank=False, null=False) 
    contents = models.TextField('Contents', blank=False, null=False) 


def __unicode__(self): 
    return self.name 

Iは互換的ユニコード & STR、同じ結果の両方を使用します。

ここには、メニュー/アクションによる管理パネルのスクリーンショットがあります。

第一画面

1st screen

著者一覧

Author List

シングル著者

Single Author

+0

Pythonはインデントでクラス/関数の本体を定義しますが、コードの読みやすさだけではありません。 –

答えて

3

あなたのインデントが正しくありません。モデルのメソッドにするには、コードをインデントする必要があります。それは次のようになります。あなたは、Python 3を使用している場合は、__str__を使用

class Author(models.Model): 
    name = models.CharField(max_length=100) 

    def __str__(self): 
     return self.name 

。 Python 2を使用している場合は、__unicode__を使用するか、python_2_unicode_compatibleデコレータでクラスを飾ります。コードを変更した後、コードの変更が有効になるようにサーバーを再起動してください。

+0

あなたはあまり助けてくれました。これらのインデントは私の終わりになるでしょう、私はすでにPHPを忘れています。 – clusterBuddy

関連する問題