Создание пользовательских валидаторов для полей во фреймворке Django REST serializers.Serializer

Я пишу сериализатор для сложного put API с большой функцией валидации. Чтобы упростить логику и сделать ее более читаемой, я хочу создать валидаторы для отдельных полей (я хочу сделать свой класс сериализатора как можно меньше и поэтому не хочу писать отдельные validate методы для каждого поля). Я передаю контекст моему сериализатору из представления, и все мои поля имеют общий контекст. Я хочу использовать этот контекст в валидаторе для выполнения необходимых проверок.

Вот как я пытаюсь создать пользовательские валидаторы:

Мой класс валидатора:

class MyCustomValidator:
    requires_context = True

    def __call__(self, value, serializer_field):
        context = serializer_field.context
        print(f"got this context: {context}")

мой сериализатор:

class MySerializer(serializers.Serializer):
   my_field = serializers.IntegerField(required=True, validators=[MyCustomValidator()])

Контекст отправки, на мой взгляд:

def get_serializer_context(self): 
    context = super().get_serializer_context() 
    context.update({'test_context': {'key': 'value'}}) 
    return context 

Но когда я вызываю этот API, я получаю следующую ошибку: __call__() missing 1 required positional argument: 'serializer_field'

Может ли кто-нибудь сказать мне, что я здесь упускаю? Спасибо...

Вернуться на верх