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:
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.
__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
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)
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é.
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
.
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.
Vous devez définir quelle colonne vous souhaitez afficher ...
par exemple:
class POAdmin(admin.ModelAdmin):
list_display = ('qty', 'cost', 'total')
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
.
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