2012-02-17 12 views
57

Yönetici tarafından en son yapılan değişikliklerin kenar çubuğunun eklenen "nesneler" adını görüntülediği varsayılan davranışı değiştirmek istiyorum. Aşağıdaki resimde bakınız:Django "xxxxxx Nesnesi" yönetici eylemi kenar çubuğunda özelleştirme gösteriliyor

In the recent actions module, it also shows new objects as "MyModelName object"

Bunları Yönetici adlandırılmış şeklini değiştirmek istiyoruz. İdeal olarak, "Politika" nesnesi örneğinde olduğu gibi, "Politika" nesnesi örneğinde olduğu gibi, "Politika" nesnesinden, "Politika: {politikanın" Politika Adı "alanının gibi bir değere geçiş yapabilmeyi istiyorum.}}.

..

benim Hasta modeli için __unicode__ bu ele düşünüyordum ama her türlü yardım takdir görünmüyor

+1

'__unicode__' bunu yapar. Neyin yanlış olduğunu görebilmemiz için kodunuzu yapıştırın –

cevap

87

__unicode__ bunu yapar. Modeliniz şöyle görünmelidir:

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

Python 3 sitesinde __str__ kullanmak gerekir: Gördüğünüz dize __unicode__ yönteminden geliyor

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

Her model için unicode metodu ilan ettiğimi anlayamadım. : doh: Üzgünüm hepsi. – patrickn

2

Haklısınız __unicode__ bunu yapmaz düşünerek konum bu şu anda çalışan adres:.

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

Son eylemler listesine baktığımda, yeni düzenlediğim filmin başlığını görüyorum.

10

, diğerleri de söylediğim gibi. Ancak, bu olay, olay günlüğü oluşturulduğunda bir nesnenin dize olarak temsil edilmesini kaydetmesidir; bu nedenle, günlük girdisi kaydedildikten sonra __unicode__ uygulamasını eklerseniz, eski öğeler üzerinde yeni başlıklar göremezsiniz, yalnızca yeni etkinlik oluşturduktan sonra

+0

Sadece __unicode__ ayarladıktan sonra Eylemler günlüğünün neden isimleri göstermediğini merak ediyordum - Biliyorum ki bu sadece yaratılış sırasında veriyi db'de depolayan bir kayıttı! –

+2

Teşekkür ederim, bana – dtc

1
sen görüntülemek istedikleri hangi sütunun, tanımlamanız gerekir

... örneğin

:

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

o cevapları katılıyorum ama benim makinede sadece çalışmıyor.

Python3 ve Django1.8 kullanıyordum ve bu çözümler hala düzgün çalışmıyor, bu yüzden bu yöntemle çalışıyorum. __str__ ve __unicode__ yöntemleri söz

class MyModel(models.Model): 

    name = models.CharField(max_length=60) 

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

'u açıklamamış olsaydınız bana büyük bir güçlük verirdim. Bu benim için de çözüldü. Ayrıca Python3 ve Django1.8 kullanıyorum. –

+0

__unicode__ benim için çalışmıyor ama bu yok! –

+0

__str__ eski yol ..... henüz Django ile python 3, yeni yol (__unicode__) çalışmıyor? – user798719

2

cevaplar doğrudur. sürüm 1.6 (Sanırım) beri Ancak docs belirtildiği gibi, ikisi için python_2_unicode_compatible dekoratör kullanabilirsiniz Python 2 ve Python 3:

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" 

Siz de olmayan Model nesnelerde yukarıda kullanabilirsiniz .