Intermédiaire
🧠 Fondamentaux
20 XP
0 personnes ont réussi
Méthodes et propriétés de modèle
Un modèle Django n'est pas juste un sac de données. Tu peux y ajouter des méthodes et des propriétés pour encapsuler la logique metier. C'est une bonne pratique : le modèle sait comment se comporter.
Une propriété Python se definit avec le decorateur @property. Elle se comporte comme un attribut en lecture seule :
class Produit(models.Model): prix_ht = models.FloatField() tva = models.FloatField(default=0.20)
Definis un modèle Product avec : - name : CharField max 100 - price : FloatField (prix unitaire HT) - stock : IntegerField, défaut 0 - description : TextField, blank=True
Ajoute ces méthodes et propriétés :
- @property is_available(self) : retourne True si stock > 0 - @property price_with_tax(self, tax_rate=0.20) : attention, une property ne peut pas prendre de paramètre. Fais-en une méthode classique get_price_with_tax(self, tax_rate=0.20) qui retourne price * (1 + tax_rate), arrondi a 2 decimales. Et une @property price_with_tax qui appelle get_price_with_tax() avec le taux par défaut. - reduce_stock(self, quantity) : reduit le stock de quantity. Retourne True si c'etait possible (stock suffisant), False sinon (et ne modifie pas le stock dans ce cas).
Meta avec app_label = 'test'.
Exemple :
champs = {f.name: f for f in Product._meta.get_fields()} 'name' in champs vaut True
Tests (4/5)
Champs definis
fields = {f.name for f in Product._meta.get_fields()}
assert 'name' in fields and 'price' in fields and 'stock' in fields