model_utils.Choices
Django, utilisateurs DRF Utilisez-vous model_utils.Choices
?
Nous l'utilisons de manière pratique, mais nous l'utilisons souvent pour la gestion des statuts.
C'est comme ça?
class News(models.Model):
STATUS = Choices(
('DRAFT', 'Brouillon'),
('CHECK', 'En attente d'une revue'),
('PUBLISHED', 'Libération'),
)
status = StatusField(
choices_name='STATUS',
help_text="Statut",
default=STATUS.DRAFT,
)
title = models.CharField(
max_length=1024,
null=False,
blank=False,
default="",
help_text="Titre de l'actualité"
)
body = models.TextField(
null=False,
blank=False,
default="",
help_text="Détails de l'actualité"
)
Dans Choice, vous pouvez définir KEY et sa description (KEY est stocké dans DB), mais je ne sais pas comment utiliser cette description. N'est-il pas acceptable de commenter? Je me sens comme. De plus, si ce champ Choice est sorti tel quel avec Serializer, seule KEY est sortie, il n'y a donc aucun moyen d'utiliser l'explication (VALUE).
Par exemple, dans l'exemple de ↑, s'il existe un écran de gestion qui gère les actualités, vous pouvez souhaiter afficher l'état dans la liste ou rechercher par état. Sur cet écran, vous voulez utiliser «Brouillon» ou «Public» au lieu de «DRAFT» ou «PUBLISHED».
Dans de tels moments, il semble stupide d'implémenter chaque programmeur pour renvoyer KEY et VALUE dans la sérialisation de sortie de Choice, donc nous créons et exploitons une telle extension.
class MyChoiceField(serializers.ChoiceField):
def to_representation(self, obj):
choice = getattr(self, '_choices')
key = str(obj)
if key in choice:
return {'key': key, 'val': choice[key]}
else:
return {'key': key, 'val': ''}
class MyModelSerializer(serializers.ModelSerializer):
"""
Réécrire les champs qui sont automatiquement développés dans le sérialiseur
"""
serializer_choice_field = MyChoiceField
Chaque sérialiseur hérite de MyModelSerializer.
class NewsSerializer(MyModelSerializer):
class Meta:
model = News
fields = "__all__"
Maintenant, status
affichera la clé et la valeur.