Django REST Framework : Как сделать пользовательский валидатор для проверки комбинации нескольких полей одновременно?
I need to make a custom validator as below. But I can't find any way to retrieve the values of several fields, on which I need to check a condition.
class MyCustomValidator():
def __call__(self, field_1, field_2):
if condition_on_field_1_and_field_2 is True:
message = 'my custom message'
raise serializers.ValidationError(message)
Я видел в документации, что есть способ предоставить контекст валидатору. Но, похоже, он предоставляет только одно "serializer_field". Есть ли способ получить более одного поля сериализатора? Как бы вы это сделали?
https://www.django-rest-framework.org/api-guide/serializers/#object-level-validation
Для выполнения любой другой проверки, требующей доступа к нескольким полям, добавьте метод .validate() в свой подкласс Serializer. Этот метод принимает единственный аргумент, который является словарем значений полей. При необходимости он должен вызывать serializers.ValidationError или просто возвращать проверенные значения. Например:
from rest_framework import serializers
class EventSerializer(serializers.Serializer):
description = serializers.CharField(max_length=100)
start = serializers.DateTimeField()
finish = serializers.DateTimeField()
def validate(self, data):
"""
Check that start is before finish.
"""
if data['start'] > data['finish']:
raise serializers.ValidationError("finish must occur after start")
return data