1
votes

Champ non défini de vérification du sérialiseur DRF

J'ai utilisé drf et également utilisé sérialiseur pour vérifier l'entrée utilisateur.

Voici mon serializer.py

serializer = BoardSerializer(data=request.data)
if serializer.is_valid():
     ....

Et utilisez-le comme ceci.

class BoardSerializer(serializers.Serializer):
    user_id = serializers.IntegerField(required=True)
    body = serializers.CharField(required=False)

Il semble que cela ne vérifie pas le champ non défini.

Par exemple, si je demande avec {'user_id': 1, 'body': 'abc', 'akak': 1} ,

is_valid () ne pas saisir le champ 'akak 'et transmettez simplement les données.

Y a-t-il une fonction pour valider si les champs sont définis dans le sérialiseur ou non?

Merci.


3 Réponses :


0
votes

Parce que akak n'est pas défini dans BoardSerializer

Vous devez ajouter akak dans le sérialiseur.

Vous pouvez ajouter le champ personnalisé akak dans le seralizer

pour catach akak, essayez ceci

request.data.get('akak')


2 commentaires

Je veux dire que, je veux valider si l'entrée de l'utilisateur a un champ non défini dans le sérialiseur.


@Hide vos champs non définis sont-ils corrigés



0
votes

Si vous créez un champ akak dans un modèle, vous devez définir votre modèle dans votre sérialiseur.

class BoardSerializer(ModelSerializer):
    user_id = serializers.IntegerField(required=True)
    body = serializers.CharField(required=False)

    class Meta:
       model = your-model


0 commentaires

2
votes

Vous pouvez mettre à jour la méthode de validation comme ceci:

class BoardSerializer(serializers.Serializer):
    user_id = serializers.IntegerField(required=True)
    body = serializers.CharField(required=False)

    def validate(self, attrs):
        unknown =  set(self.initial_data) - set(self.fields)
        if unknown:
            raise serializers.ValidationError("Unknown field(s): {}".format(", ".join(unknown)))
        return attrs

Ici, il vérifiera s'il y a des champs supplémentaires passant par le sérialiseur et comparera avec les champs existants. S'il existe, alors il lancera une erreur (ou rendra is_valid () == false ). Pour plus d'informations, vous pouvez vérifier ce alors répondez .


1 commentaires

Exactement ce que je veux. Merci!