Как я могу вызвать методы проверки на уровне поля, определенные как в дочернем, так и в родительском сериализаторе?
У меня есть сценарий, в котором у меня есть 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