Создание пользовательских валидаторов для полей во фреймворке 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'
Может ли кто-нибудь сказать мне, что я здесь упускаю? Спасибо...