관리자 작업 사이드 바에 Django "xxxxxx 개체"디스플레이 사용자 지정


110

관리자 최근 변경 사항 사이드 바가 추가 된 "개체"의 이름을 표시하는 방법의 기본 동작을 변경하고 싶습니다. 아래 그림을 참조하십시오.

최근 작업 모듈에서는 새 개체도 "MyModelName 개체"로 표시됩니다.

Admin에서 이름이 지정되는 방식을 변경하고 싶습니다. 이상적으로는 "정책"개체 예제에서와 같이 "MyModelName 개체"에서 "정책 : {{정책의"정책 이름 "필드 값}}과 같이"MyModelName 개체 "로 변경할 수 있기를 원합니다.

__unicode__내 환자 모델이 이것을 처리 했다고 생각 했지만 그렇지 않습니다. 도움을 주시면 감사하겠습니다.


1
__unicode__그렇게합니다. 우리가 무엇이 잘못되었는지 볼 수 있도록 코드를 붙여 넣기
단 - klasson

__unicode__그러나 파이썬 3에서 나를 위해 작동하지 않았다, __str__아래의 대답에 설명 된대로 일을했다
댄 왕

답변:


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 은 예전 방식입니다 .....하지만 Django를 사용하는 파이썬 3에서는 새로운 방식 ( unicode )이 작동하지 않습니까?
user798719

13

당신이보고있는 문자열은 __unicode__다른 사람들이 언급했듯이 method에서 온 것입니다 . 그러나 문제는 관리자가 로그 이벤트를 생성 할 때 객체의 문자열 표현을 저장한다는 것입니다. 따라서 __unicode__로그 항목을 저장 한 후 구현 을 추가 하면 새로운 작업을 수행 한 후에 만 ​​이전 항목에 새 제목이 표시되지 않습니다.


유니 코드를 설정 한 후 Actions 로그에 이름이 표시되지 않는 이유가 궁금 합니다. 생성 당시 데이터를 가져 오는 db에 저장된 로그라는 것을 알았어 야했습니다!
markwalker_

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

이것은 self.title을 반환 하는 def str (self) : 사용하여 작동 합니다.

다음과 같이 사용하십시오.

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에서 python2.7에 대한 오래된 이야기이고, str이다 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.