2012-02-17 10 views
57

Chciałbym zmienić domyślne zachowanie, w jaki sposób pasek ostatnich zmian administracyjnych wyświetla nazwę "obiektów" dodanych. Zapoznaj się z poniższym rysunku:Django "xxxxxx" Dostosowywanie wyświetlania obiektów w pasku bocznym paska administracyjnego

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

chciałbym zmienić sposób te są nazywane w admin. Idealnie chciałbym móc zmienić go z "MyModelName object" na, jak w przykładzie obiektu "Policy", coś jak "Polityka: {{wartość pola" Policy Policy "pola.}}.

..

Myślałam że __unicode__ dla mojego modelu pacjenta obsługiwane, ale nie wydaje się, aby Każda pomoc jest mile widziana

+1

'__unicode__' robi to. Wklej swój kod, abyśmy mogli zobaczyć, co jest nie tak –

Odpowiedz

87

__unicode__ robi to. Twój model powinien wyglądać mniej więcej tak:

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

W Pythonie 3 trzeba użyć __str__:

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

Głupio nie zauważyłem, że zadeklarowałem metody unicode dla każdego modelu, Z WYJĄTKIEM tego. : doh: Przepraszam. – patrickn

2

masz rację sądząc, że __unicode__ robi, że mam to działa teraz.

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

Kiedy patrzę na listę ostatnich działań, widzę tytuł filmu, który właśnie edytowałem.

10

Ciąg widzisz pochodzi __unicode__ metody, jak wspominają inni. Ale chodzi o to, że administrator zapisuje ciąg reprezentacji obiektu podczas tworzenia zdarzenia dziennika, dlatego jeśli dodasz implementację __unicode__ po zapisaniu wpisu dziennika, nie zobaczysz nowych tytułów na starych przedmiotach, tylko po wykonaniu nowej aktywności

+0

Właśnie się zastanawiałem, dlaczego Dziennik Actions nie wyświetlał nazw po ustawieniu __unicode__ - Powinienem był wiedzieć, że był to tylko dziennik przechowywany w bazie danych pobierania danych w momencie tworzenia! –

+2

dziękuję, dałby mi duży kłopot, gdybyś nie wyjaśnił, że – dtc

1

Musisz określić, które kolumny, które chcesz wyświetlić ...

na przykład:

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

zgadzam się z tych odpowiedzi, ale na moim komputerze po prostu nie działa.

Używałem Python3 i Django 1.8, a te rozwiązania nadal nie działają poprawnie, więc próbuję z tą metodą.

class MyModel(models.Model): 

    name = models.CharField(max_length=60) 

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

To rozwiązało dla mnie również. Używam również Python3 i Django1.8. –

+0

__unicode__ nie działa dla mnie, ale to robi! –

+0

__str__ jest stary sposób ..... jeszcze python 3 z Django, nowy sposób (__unicode__) nie działa? – user798719

2

Odpowiedzi przywołujące __str__ i __unicode__ metody są prawidłowe. Jak stwierdzono w docs Jednak od wersji 1.6 (myślę), można użyć python_2_unicode_compatible dekorator dla zarówno Python 2 i 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" 

można wykorzystywać powyższe nie- Model obiektów, jak również .

Powiązane problemy