Как я могу вызвать методы проверки на уровне поля, определенные как в дочернем, так и в родительском сериализаторе?

У меня есть сценарий, в котором у меня есть 3 сериализатора, каждый из которых имеет набор одинаковых полей, а также связанные с ними serializer.validate_field методы:

class Serializer1(serializers.Serializer):
    same_field_1 = serializers.BooleanField()
    same_field_2 = serializers.BooleanField()
    ...
    validate_field_1()
    validate_field_2()
    ...

class Serializer2(serializers.Serializer):
    same_field_1 = serializers.BooleanField()
    same_field_2 = serializers.BooleanField()
    ...
    validate_field_1()
    validate_field_2()
    ...

class Serializer3(serializers.Serializer):
    same_field_1 = serializers.BooleanField()
    same_field_2 = serializers.BooleanField()
    ...
    validate_field_1()
    validate_field_2()
    ...

NOTE: каждый класс содержит другие поля и методы валидации, которые также не разделяются с другими сериализаторами.

Я хотел бы объединить общие поля и методы проверки в родительском классе, а затем, чтобы каждый из этих дочерних классов наследовался от этого родительского класса.

Тогда возникает вопрос, как мне запустить валидацию, определенную для дочернего и родительского класса? Я не вижу никакой специальной документации, обсуждающей, как мы можем запустить цикл is_valid() на родительском классе, а также на дочернем классе.

сделайте вызов ParentSerializer().validate_my_field в validate_my_field ребенка

class BaseSerializer(ModelSerializer):
    my_field = serializers.CharField()
    def validate_my_field(self, value):
        # raise ValidationError if needed
        return value

class ChildSerializer(BaseSerializer):
    def validate_my_field(self, value):
        value = super().validate_my_field(value)
        # raise Exception by child
        return value
Вернуться на верх