J'applique une API REST en DRF avec ModelViewSet
et ModelSerializer
. Toutes mes API utilisent le format JSON et certains de mes modèles utilisent champ ChoiceField, comme ça:Retourne display_name dans ChoiceField
MyModel(models.Model):
KEY1 = 'Key1'
KEY2 = 'Key2'
ATTRIBUTE_CHOICES = (
(KEY1, 'Label 1'),
(KEY2, 'Label 2'))
attribute = models.CharField(max_length=4,
choices=ATTRIBUTE_CHOICES, default=KEY1)
Mon problème est que par défaut DRF renvoie toujours (et accepter) la clé de ces choix pour les messages JSON (voir here), mais je voudrais utiliser l'étiquette à la place, parce que je pense qu'il est plus cohérent et clair de ne pas savoir qui utilisera ces API. Toute suggestion?
Une raison pour laquelle vous économisez l'étiquette au lieu de la clé? – mariodev
@mariodev Je ne sauvegarde pas l'étiquette, dans le db sera stocké la clé. J'utilise l'étiquette uniquement pour la communication avec le client, MyChoiceField ne fait que mapper les valeurs avec les touches et viceversa. Je pense que c'est plus compréhensible pour les clients qui n'ont pas besoin de connaître la représentation interne de ces données. – SimoV8
Je suppose que c'est correct pour votre cas particulier. Je ne suis pas convaincu que le fait de passer une étiquette (au lieu d'une clé) dans 'to_internal_value' est la meilleure pratique à suivre. En général, le passage d'une représentation clé du client aurait plus de sens. À moins que cela ne soit impossible dans votre cas, votre solution est acceptable. +1;) – mariodev