@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
  • Вопрос задан
  • 34 просмотра
Решения вопроса 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


Нашел решение
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@bacon
В доках пишут что с requires_context = True в __call__ появляется еще один параметр, проверить что в нем, https://www.django-rest-framework.org/api-guide/va...
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Junto Москва
от 80 000 до 120 000 ₽
Maroom Москва
от 100 000 до 160 000 ₽
Верфь Екатеринбург
от 70 000 до 140 000 ₽
28 сент. 2020, в 00:10
15000 руб./за проект
27 сент. 2020, в 21:54
15000 руб./за проект