Django "xxxxxx Nesnesi" yönetici eylemi kenar çubuğunda ekran özelleştirme


110

Yöneticinin son değişiklikleri kenar çubuğunun eklenen "nesnelerin" adını nasıl görüntülediğine ilişkin varsayılan davranışı değiştirmek istiyorum. Aşağıdaki resme bakın:

Son işlemler modülünde, yeni nesneleri "MyModelName nesnesi" olarak da gösterir.

Bunların Yönetici'de isimlerini değiştirmek istiyorum. İdeal olarak, "Politika" nesnesi örneğinde olduğu gibi "MyModelName nesnesi" yerine "Politika: {{politikanın" Politika Adı "alanının değeri}} gibi bir şeye değiştirebilmek istiyorum.

__unicode__Hasta modelimin bununla ilgilendiğini düşünüyordum , ama öyle görünmüyor. Herhangi bir yardım takdir edilmektedir.


1
__unicode__bunu yapar. Neyin yanlış olduğunu görebilmemiz için kodunuzu yapıştırın
dan-klasson

__unicode__Python 3'te benim için işe yaramadı. Ancak, __str__aşağıdaki cevapta belgelendiği gibi
Dan King

Yanıtlar:


168

__unicode__bunu yapar. Modeliniz şunun gibi görünmelidir:

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

Python 3'te şunları kullanmanız gerekir __str__:

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

1
Aptalca, bunun DIŞINDA her model için unicode yöntemlerini ilan ettiğimi fark etmedim. : doh: Özür dilerim.
patrickn

29

__str__Yöntemi kullanmak Python3 ve Django1.8'de çalışır:

class MyModel(models.Model):

    name = models.CharField(max_length=60)

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

3
Bu benim için de çözüldü. Ayrıca Python3 ve Django1.8 kullanıyorum.
Teodor Scorpan

str eski yoldur ..... yine de Django ile python 3, yeni yol ( unicode ) çalışmıyor mu?
user798719

13

Gördüğünüz dizi __unicode__, başkalarının da bahsettiği gibi yöntemden geliyor . Ancak asıl mesele, yöneticinin bir nesnenin dize temsilini günlük olayı oluşturduğunda kaydetmesidir, bu nedenle __unicode__günlük girişi kaydedildikten sonra uygulama eklerseniz , eski öğelerde yeni başlıklar görmezsiniz, yalnızca yeni bir etkinlik yaptıktan sonra


Unicode'u ayarladıktan sonra Eylemler günlüğünün neden isimleri göstermediğini merak ediyordum - bunun sadece oluşturma sırasında veri alan db'de depolanan bir günlük olduğunu bilmeliydim!
markwalker_

2
teşekkür ederim, bunu açıklamasaydın bana büyük bir güçlük
çıkarırdı

7

Bahsedilen cevaplar __str__ve __unicode__yöntemler doğrudur. Bununla birlikte, belgelerde belirtildiği gibi, sürüm 1.6'dan (sanırım) bu yana, hem Python 2 hem de Python 3 için python_2_unicode_compatibledekoratör kullanabilirsiniz :

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"

Yukarıdakileri Modelnesne olmayanlarda da kullanabilirsiniz .


3

Hangi sütunu görüntülemek istediğinizi tanımlamanız gerekiyor ...

Örneğin:

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

2

Bunu yaptığını düşünmekte haklısın __unicode__. Bunu şu anda çalıştırıyorum:

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.


2

Bu, def str (self) kullanarak çalışır : self.title

Şunun gibi bir şey kullanın:

class Blog(models.Model):
    title = models.CharField(max_length=200)
    def __str__(self):
        return self.title

1

Bu soru 6 yaşında olduğu için çok şey değişti. Bir güncelleme yapmama izin verin. Python3.6 ve Django'nun en son sürümü (2.1.2) ile her zaman __str__()yeni kodda kullanmalısınız . __unicode__()Çünkü python3 içinde python2.7 için eski bir hikaye, strbir unicode.


0

__str__()Modele Patientşu şekilde yöntem ekleyerek :

class Patient(models.Model):
name=models.CharField(max_length=200)
#.........
def __str__(self):
    return self.name

nesne yerine hastanın adını gösterecektir. Ayrıntı için burayı kontrol edin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.