Проверить поле на основе результатов других проверок поля в Django Rest Framework - PullRequest
1 голос
/ 04 августа 2020

У меня есть следующий файл serializers.py:

from rest_framework import serializers

class SampleSerializer(serializers.Serializer):
    name = serializers.CharField(allow_blank=False,required=True)
    initials = serializers.CharField(allow_blank=False,required=True)

    def validate_initials(self,data):
        if len(data) > 10:
            raise serializers.ValidationError("Length of initials is too long")

    

Я хочу запретить вызов validate_initials(), если не указан name. Другими словами, только если проверка для name проходит, она должна проверять initials.

Как мне достичь такой иерархии при проверке сериализатора?

1 Ответ

0 голосов
/ 04 августа 2020

Вы можете реализовать это в методе .validate(…) [drf-doc] . Это будет выполняться, когда проверка отдельных полей прошла успешно:

class SampleSerializer(serializers.Serializer):
    name = serializers.CharField(allow_blank=False,required=True)
    initials = serializers.CharField(allow_blank=False,required=True)

    def <b>validate</b>(self,data):
        if len(data['initials']) > 10:
            raise serializers.ValidationError('Length of initials is too long')
        return super().validate(data)

Вы также можете включить более сложную проверку, когда вы проверяете, например, удовлетворяют ли два поля вместе определенному ограничению.

...