Intermédiaire
🧠 Fondamentaux
20 XP
0 personnes ont réussi
Serializer avec champs calcules
Dans une API de blog, tu ne vas pas stocker le nombre de commentaires dans l'article lui-meme. Tu vas le calculer a la volee. Pareil pour un resume du contenu ou le nom de l'auteur en majuscules. Ce sont des champs calcules qui n'existent pas dans tes donnees brutes mais que tu veux dans ta reponse API.
Dans DRF, le SerializerMethodField fait exactement ca : tu declares un champ et tu ecris une methode get_<nom_du_champ> qui produit la valeur. On va reproduire ce mecanisme pour comprendre l'introspection Python qui le rend possible.
Tu vas créer une classe ArticleDetailSerializer avec :
fields : la liste des champs normaux ('id', 'title', 'content', 'author') method_fields : la liste des champs calcules ('comment_count', 'summary', 'author_upper')
get_comment_count(data) : retourne le nombre d'éléments dans data['comments'] (ou 0 si la clé n'existe pas)
get_summary(data) : retourne les 50 premiers caracteres de data['content'] suivis de '...' si le contenu fait plus de 50 caracteres, sinon retourne le contenu complet
get_author_upper(data) : retourne data['author'] en majuscules
serialize(data) : construit le dictionnaire résultat avec les champs normaux ET les champs calcules
Exemple :
s = ArticleDetailSerializer() article = {'id': 1, 'title': 'Python', 'content': 'Un long texte...', 'author': 'alice', 'comments': [1, 2, 3]} r = s.serialize(article) r['comment_count'] vaut 3 r['author_upper'] vaut 'ALICE'