Django "Objek xxxxxx" menampilkan kustomisasi di bilah sisi tindakan admin


110

Saya ingin mengubah perilaku default bagaimana admin bar samping perubahan terbaru menampilkan nama "objek" yang ditambahkan. Lihat gambar di bawah ini:

Dalam modul tindakan terbaru, ini juga menampilkan objek baru sebagai "objek MyModelName"

Saya ingin mengubah bagaimana ini dinamai di Admin. Idealnya, saya ingin bisa mengubahnya dari "objek MyModelName" menjadi, seperti dalam contoh objek "Kebijakan", sesuatu seperti "Kebijakan: {{nilai bidang" Nama Kebijakan "kebijakan.}}.

Saya berpikir __unicode__untuk model Pasien saya yang menangani ini, tetapi tampaknya tidak. Bantuan apa pun dihargai.


1
__unicode__melakukan itu. Rekatkan kode Anda sehingga kami dapat melihat apa yang salah
dan-klasson

__unicode__tidak berhasil untuk saya dengan Python 3. Namun, __str__berhasil seperti yang didokumentasikan dalam jawaban di bawah
Dan King

Jawaban:


168

__unicode__melakukan itu. Model Anda akan terlihat seperti ini:

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

Di Python 3, Anda perlu menggunakan __str__:

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

1
Dengan bodohnya saya tidak menyadari bahwa saya telah mendeklarasikan metode unicode untuk setiap model KECUALI yang ini. : doh: Maaf semuanya.
patrickn

29

Menggunakan __str__metode bekerja pada Python3 dan Django1.8:

class MyModel(models.Model):

    name = models.CharField(max_length=60)

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

3
Ini menyelesaikannya untuk saya juga. Saya juga menggunakan Python3 dan Django1.8.
Teodor Scorpan

str adalah cara lama ..... namun python 3 dengan Django, cara baru ( unicode ) tidak berfungsi?
pengguna798719

13

String yang Anda lihat berasal dari __unicode__metode, seperti yang disebutkan orang lain. Tetapi masalahnya adalah admin menyimpan representasi string dari suatu objek ketika membuat peristiwa log, oleh karena itu jika Anda menambahkan __unicode__implementasi setelah entri log disimpan, Anda tidak akan melihat judul baru pada item lama, hanya setelah Anda membuat beberapa aktivitas baru


Saya hanya bertanya-tanya mengapa log Tindakan tidak menampilkan nama setelah saya menyetel unicode - saya harus tahu itu hanya log yang disimpan dalam data pengambilan db pada saat pembuatan!
markwalker_

2
terima kasih, akan merepotkan saya jika Anda tidak menjelaskannya
dtc

7

Jawaban yang disebutkan __str__dan __unicode__metode sudah benar. Seperti yang tercantum dalam dokumen Namun, sejak versi 1.6 (saya pikir), Anda dapat menggunakan python_2_unicode_compatibledekorator untuk kedua Python 2 dan 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"

Anda juga dapat menggunakan yang di atas pada non- Modelobjek.


3

Anda perlu menentukan, kolom mana yang ingin Anda tampilkan ...

sebagai contoh:

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

2

Anda benar dalam berpikir bahwa __unicode__melakukan itu. Saya sedang menjalankan ini sekarang:

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

Ketika saya melihat di daftar aksi terbaru, saya melihat judul film yang baru saja saya edit.


2

Ini akan berhasil, menggunakan def str (self): yang mengembalikan self.title

Gunakan sesuatu seperti:

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

1

Sejak pertanyaan ini berumur 6 tahun, banyak hal telah berubah. Biarkan saya memperbaruinya. Dengan python3.6 dan versi terbaru Django (2.1.2) Anda harus selalu menggunakan __str__()kode baru. __unicode__()adalah cerita lama untuk python2.7 karena di python3, stradalah unicode.


0

Dengan menambahkan __str__()metode ke model Patientseperti ini:

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

akan menampilkan nama pasien, bukan objek. Untuk detailnya periksa di sini

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.