125 votes

Personnalisation de l'affichage de l'objet "xxxxxx" de Django dans la barre latérale de l'action d'administration

Je voudrais modifier le comportement par défaut de la manière dont la barre latérale d'administration des modifications récentes affiche le nom des "objets" ajoutés. Reportez-vous à l'image ci-dessous :

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

J'aimerais modifier la façon dont ils sont nommés dans l'administration. Idéalement, je voudrais pouvoir passer de "objet MyModelName" à, comme dans l'exemple de l'objet "Policy", quelque chose comme "Policy : {{ valeur du champ "Policy Name" de la politique. }}.

Je pensais que __unicode__ pour mon modèle Patient gérait cela, mais il ne semble pas le faire. Toute aide est la bienvenue.

185voto

dan-klasson Points 2932

__unicode__ le fait. Votre modèle devrait ressembler à quelque chose comme ça :

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

Sous Python 3, vous devez utiliser __str__ :

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

30voto

Utilisation de la __str__ fonctionne sur Python3 et Django1.8 :

class MyModel(models.Model):

    name = models.CharField(max_length=60)

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

13voto

Dmitry Shevchenko Points 11398

La chaîne que vous voyez vient de __unicode__ méthode, comme d'autres l'ont mentionné. Mais le problème est que l'administration enregistre la représentation sous forme de chaîne d'un objet lorsqu'elle crée un événement de journal. __unicode__ après la sauvegarde de l'entrée du journal, vous ne verrez pas de nouveaux titres sur les anciens éléments, mais seulement après avoir effectué une nouvelle activité.

7voto

alxs Points 369

Les réponses mentionnant __str__ y __unicode__ sont correctes. Comme indiqué dans le docs Cependant, depuis la version 1.6 (je crois), vous pouvez utiliser la fonction python_2_unicode_compatible décorateur pour les deux Python 2 et 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"

Vous pouvez utiliser ce qui précède en non Model également des objets.

5voto

Vishnu M. D. Points 151

Cela fonctionnerait, en utilisant def str (self) : qui renvoie self.title

Utilisez quelque chose comme :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X