Le décorateur property dans Django
Re,
On créer un modèle, avec une méthode décorée d'un @property.
Cette méthode est utilisé dans le HTML.
Dans ce cas, pk utiliser un property ?
Que je mette le property ou non j'ai le résultat escompté.
Est-ce que c'est pour par la suite pouvoir utiliser cette méthode dans admin.py ou autre ? Ou c'est une convention ? ou autre ?
Merci
class BlogPost(models.Model):
title = models.CharField(max_length=255, unique=True, verbose_name="Titre")
slug = models.SlugField(max_length=255, blank=True, unique=True)
author = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True)
# pour afficher date et heure à laquelle l'article a été créé ou modif
last_updated = models.DateTimeField(auto_now=True)
# ici nous avons le contrôle sur la date
created_on = models.DateField(blank=True, null=True)
published = models.BooleanField(default=False, verbose_name="Publié")
content = models.TextField(blank=True, verbose_name="Contenu")
class Meta:
# par date de création, - pour que les derniers soient au début
ordering = ['-created_on']
verbose_name = "Article"
def __str__(self):
return f"{self.title} - {self.created_on}"
def save(self, *args, **kwargs):
if not self.slug:
self.slug = slugify(self.title)
super().save(*args, **kwargs)
@property
def author_or_default(self):
if self.author:
return self.author.username
return "L'auteur inconnu"
<h5>Publié par <i>{{ post.author_or_default }}</i></h5>
Salut Gab !
Effectivement dans un template, aucune différence car tu n'as pas besoin dans le langage de template de Django d'utiliser les parenthèses après une fonction.
Tu peux donc utiliser post.author_or_default (et si tu essaies de mettre des parenthèses tu ne peux même pas : tu auras une erreur de template).
Donc ça ne change pas grand-chose.
La raison de mettre une propriété est effectivement au niveau de l'utilisation dans un script Python. Il y a plein d'autres endroits, en dehors des templates (dans les vues, dans un script, peu importe) dans lequel tu pourrais utiliser author_or_default. Dans ce cas-là tu peux donc te poser la question si une propriété fait du sens ou non.
Inscris-toi
(c'est gratuit !)
Tu dois créer un compte pour participer aux discussions.
Créer un compte