web-dev-qa-db-fra.com

Django "Objet xxxxxx" affiche la personnalisation dans l'encadré des actions de l'administrateur

Je voudrais changer le comportement par défaut de la façon dont la barre latérale de modifications récentes admin 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"

Je voudrais changer la façon dont ceux-ci sont nommés dans l'administrateur. Idéalement, j'aimerais pouvoir passer de "l'objet MyModelName" à l'exemple de l'objet "Policy", par exemple, "Policy: {{valeur du champ" Policy Name "de la stratégie.}}. 

Je pensais que __unicode__ pour mon modèle Patient gérait cela, mais cela ne semblait pas être le cas. Toute aide est appréciée.

79
patrickn

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

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

Sur Python 3, vous devez utiliser __str__:

def __str__(self):
   return 'Policy: ' + self.name
130
dan-klasson

L'utilisation de la méthode __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)
24

La chaîne que vous voyez provient de la méthode __unicode__, comme d'autres l'ont mentionné. Mais le fait est que l'administrateur enregistre la représentation sous forme de chaîne d'un objet lorsqu'il crée un événement de journal. Par conséquent, si vous ajoutez l'implémentation __unicode__ après l'enregistrement de l'entrée de journal, vous ne verrez pas les nouveaux titres sur les anciens éléments, uniquement après avoir créé une nouvelle activité.

13
Dmitry Shevchenko

Les réponses mentionnant les méthodes __str__ et __unicode__ sont correctes. Comme indiqué dans les docs cependant, depuis la version 1.6 (je pense), vous pouvez utiliser le décorateur python_2_unicode_compatible pour both 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 également utiliser ce qui précède dans des objets non -Model.

6
alxs

Vous avez raison de penser que __unicode__ fait cela. J'ai cette course en ce moment:

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

Lorsque je regarde dans la liste des actions récentes, je vois le titre du film que je viens de monter.

2
Andrew Barrett

Vous devez définir quelle colonne vous souhaitez afficher ...

par exemple:

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

Depuis que cette question a 6 ans, beaucoup de choses ont changé. Permettez-moi de mettre à jour it.Avec python3.6 et la dernière version de Django (2.1.2), vous devez toujours utiliser __str__() dans le nouveau code. __unicode__() est une vieille histoire pour python2.7 car dans python3, str est unicode.

0
cgsdfc

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

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

0
Vishnu M. D.