144 votes

list_display - icônes booléens pour les méthodes

Lors de la définition du tableau list_display pour un fichier ModelAdmin si une BooleanField ou NullBooleanField est donnée, l'interface utilisateur utilisera de jolies icônes au lieu du texte vrai/faux dans la colonne. Si une méthode qui renvoie un booléen est donnée, cependant, elle imprime simplement True/False.

Existe-t-il un moyen de faire en sorte qu'il utilise les jolies icônes pour une méthode booléenne ?

281voto

Daniel Roseman Points 199743

C'est documenté, bien qu'il soit un peu difficile à trouver - allez deux écrans plus bas à partir de ici et vous trouverez ceci :

Si la chaîne de caractères donnée est une méthode du modèle, de ModelAdmin ou un appelable qui renvoie Vrai ou Faux, Django affichera une jolie icône "on" ou "off" si vous donnez à la méthode une valeur de boolean dont la valeur est True .

et l'exemple donné est :

def born_in_fifties(self):
    return self.birthday.strftime('%Y')[:3] == '195'
born_in_fifties.boolean = True

14 votes

Une idée de la manière de procéder lorsque vous utilisez le décorateur @property : "AttributeError : 'property' object has no attribute 'boolean'".

4 votes

0 votes

c'est très utile

23voto

Denis Points 374

Merci à @daniel-roseman (rtfm)
Depuis Django 3.2 il existe un décorateur @admin.display(boolean=True) :

Si la chaîne (en list_display ) donnée est une méthode du modèle, ModelAdmin ou un appelant qui renvoie True , False ou None Django affichera une jolie icône "oui", "non" ou "inconnu" si vous entourez la méthode avec la méthode display() en passant par le décorateur boolean avec la valeur est fixée à True :

class Person(models.Model):
    birthday = models.DateField()

    @admin.display(boolean=True)
    def born_in_fifties(self):
        return 1950 <= self.birthday.year < 1960

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