2012-02-17 6 views
57

Me gustaría cambiar el comportamiento predeterminado de cómo la barra lateral de cambios recientes de administrador muestra el nombre de "objetos" agregados. Se refieren a la imagen siguiente:Django "Objeto xxxxxx" personalización de pantalla en la acción de administración barra lateral

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

me gustaría cambiar la forma en que el nombre asignado en la parte administrativa. Idealmente, me gustaría poder cambiarlo de "Objeto MyModelName" a, como en el ejemplo del objeto "Política", algo así como "Política: {{valor del campo" Nombre de la política "de la política.}}.

..

estaba pensando que __unicode__ para mi modelo de paciente maneja esto, pero no parece que se aprecia Cualquier ayuda

+1

'__unicode__' hace eso. Pegue su código para que podamos ver lo que está mal –

Respuesta

87

__unicode__ hace eso. Su modelo debe ser algo como esto:

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

En Python 3 es necesario utilizar __str__:

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

Tontamente no me di cuenta de que había declarado métodos Unicode para cada modelo, EXCEPTO este. : doh: lo siento todo. – patrickn

2

tienes razón en pensar que hace que este __unicode__ he ejecutándose en este momento:.

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

Cuando miro en la lista de acciones recientes, veo el título de la película que acabo de editar.

10

La cadena que se está viendo está viniendo de __unicode__ método, como otros han mencionado. Pero la cosa es que el administrador guarda la representación de cadena de un objeto cuando crea un evento de registro, por lo tanto, si agrega __unicode__ implementación después de guardar la entrada de registro, no verá títulos nuevos en elementos antiguos, solo después de realizar alguna actividad nueva

+0

Me preguntaba por qué el registro de acciones no mostraba los nombres después de configurar __unicode__ - ¡Debería saber que era solo un registro almacenado en el db que tomaba datos en el momento de la creación! –

+2

gracias, me habría dado una gran molestia si no me hubieras explicado que – dtc

1

Es necesario definir, qué columna que desea mostrar ...

por ejemplo:

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

Estoy de acuerdo con las respuestas, pero en mi máquina no funciona.

Estaba usando Python3 y Django1.8, y esas soluciones todavía no funcionan correctamente, así que lo intento con este método.

class MyModel(models.Model): 

    name = models.CharField(max_length=60) 

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

Esto también me ha solucionado. También uso Python3 y Django1.8. –

+0

__unicode__ no funciona para mí, pero esto sí! –

+0

__str__ es la vieja manera ..... pero Python 3 con Django, la nueva forma (__unicode__) no funciona? – user798719

2

Las respuestas mencionan __str__ y __unicode__ métodos son correctos. Como se indica en la docs Sin embargo, desde la versión 1.6 (creo), puede utilizar el decorador python_2_unicode_compatible para tanto Python 2 y 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" 

Usted puede usar lo anterior en Model objetos no así .

Cuestiones relacionadas