Chciałbym zmienić domyślne zachowanie, w jaki sposób panel boczny ostatnich zmian administratora wyświetla nazwę dodanych „obiektów”. Zobacz zdjęcie poniżej:
Chciałbym zmienić sposób ich nazywania w panelu administracyjnym. W idealnym przypadku chciałbym móc zmienić to z „MyModelName object” na, jak w przykładzie obiektu „Policy”, coś w rodzaju „Policy: {{wartość pola„ Policy Name ”.}}.
Myślałem, że __unicode__
mój model pacjenta sobie z tym poradził, ale wygląda na to, że tak nie jest. Każda pomoc jest mile widziana.
django
django-models
django-admin
patrickn
źródło
źródło
__unicode__
robi to. Wklej swój kod, abyśmy mogli zobaczyć, co jest nie tak__unicode__
nie działało dla mnie w Pythonie 3. Jednak__str__
działało, jak udokumentowano w odpowiedzi poniżejOdpowiedzi:
__unicode__
robi to. Twój model powinien wyglądać mniej więcej tak:W Pythonie 3 musisz użyć
__str__
:źródło
Użycie
__str__
metody działa na Python3 i Django1.8:źródło
Ciąg, który widzisz, pochodzi z
__unicode__
metody, jak wspominali inni. Ale chodzi o to, że admin zapisuje reprezentację ciągu obiektu podczas tworzenia zdarzenia dziennika, dlatego jeśli dodasz__unicode__
implementację po zapisaniu wpisu dziennika, nie zobaczysz nowych tytułów na starych elementach, tylko po wykonaniu nowej czynnościźródło
Podane odpowiedzi
__str__
i__unicode__
metody są poprawne. Jak stwierdzono w dokumentacji , od wersji 1.6 (chyba) można używaćpython_2_unicode_compatible
dekoratora zarówno dla Pythona 2, jak i Pythona 3:Możesz użyć powyższego również w
Model
obiektach niebędących obiektami.źródło
Musisz zdefiniować, którą kolumnę chcesz wyświetlić ...
na przykład:
źródło
Masz rację, myśląc, że to
__unicode__
robi. Mam to uruchomione teraz:Kiedy patrzę na listę ostatnich akcji, widzę tytuł filmu, który właśnie zredagowałem.
źródło
To zadziała, używając def str (self):, które zwraca self.title
Użyj czegoś takiego:
źródło
Ponieważ to pytanie ma już 6 lat, wiele się zmieniło. Pozwólcie, że dokonam aktualizacji. Dzięki python3.6 i najnowszej wersji Django (2.1.2) należy zawsze używać
__str__()
nowego kodu.__unicode__()
to stara historia dla pythona2.7, ponieważ w pythonie3str
jestunicode
.źródło
Dodając
__str__()
metodę do modelu wPatient
ten sposób:wyświetli nazwę pacjenta zamiast obiektu. Szczegóły znajdziesz tutaj
źródło