5 votes

Django rest framework - comment ajouter une valeur de champ statique pour un sérialiseur

J'ai besoin d'ajouter un champ statique à mon sérialiseur. Il devrait toujours renvoyer la même valeur, peu importe l'objet passé. Actuellement, je l'ai implémenté de cette manière :

class QuestionSerializer(serializers.ModelSerializer):
    type = serializers.SerializerMethodField()

    @staticmethod
    def get_type(obj):
        return 'question'

    class Meta:
        model = Question
        fields = ('type',)

Mais y a-t-il un moyen plus simple de le faire, sans le SerializerMethodField ?

2voto

lucasnadalutti Points 4520

La seule alternative serait de substituer to_representation et d'ajouter la valeur ici :

def to_representation(self, obj):
    data = super().to_representation(obj)
    data['type'] = 'question'
    return data

Il ne s'agit toutefois pas d'une bien meilleure option.

1voto

Mostafa Vafi Points 11

Si vous ne vous souciez pas d'ajouter une ligne à votre modèle, il serait plus facile d'ajouter un champ statique à votre modèle.

class Question(models.Model):
    type = 'question'

class QuestionSerializer(serializers.ModelSerializer):

    class Meta:
        model = Question
        fields = ('type',)

0voto

frosthamster Points 6

Vous pouvez utiliser serializers.HiddenField

class QuestionSerializer(serializers.ModelSerializer):
type = serializers.HiddenField(default='question')

class Meta:
    model = Question
    fields = ('type',)

http://www.django-rest-framework.org/api-guide/fields/#hiddenfield

0voto

David Nathan Points 2616

En utilisant un ReadOnlyField a fonctionné pour moi:

class QuestionSerializer(serializers.ModelSerializer):
type = serializers.ReadOnlyField(default='question')

class Meta:
    model = Question
    fields = ('type',)

https://www.django-rest-framework.org/api-guide/fields/#readonlyfield

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X