@ATNC
Full-stack web\python developer

Как передать контекст в Class-based validator?

Здравствуйте. Скажите, пожалуйста, как передать дополнительный контекст в валидатор? Необходимо получить инстанс объекта в валидаторе. А конкретно получить значение одного из полей customer
class TestSerializer(serializers.ModelSerializer):
    deadline = serializers.DateTimeField(validators=[DeadlineValidator()])
    
    class Meta:
        model = Topic
        fields = ('customer',  'deadline', )

class DeadlineValidator:
    requires_context = True

    def __call__(self, value):

        if value < timezone.now():
            raise ValidationError('Error')

        return value


P.S.
def validate_deadline(self, value):... не совсем подходит, так как данный валидатор переиспользуется в нескольких местах и хотелось бы следовать принципу DRY
  • Вопрос задан
  • 105 просмотров
Решения вопроса 1
@ATNC Автор вопроса
Full-stack web\python developer
class DeadlineValidator:
    requires_context = True

    def set_context(self, serializer_field):
        instance = serializer_field.parent.instance

    def __call__(self, value):

        if value < timezone.now():
            raise ValidationError('Error')

        return value


Нашел решение
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы