1

Я начал использовать django-rest-framework для своего приложения, и у меня есть вопрос относительно validator. В документации я нашел этот пример для проверки объекта:Проверка работоспособности Django Rest: Отметить поле как ошибку

from rest_framework import serializers 

class EventSerializer(serializers.Serializer): 
    description = serializers.CharField(max_length=100) 
    start = serializers.DateTimeField() 
    finish = serializers.DateTimeField() 

    def validate(self, attrs): 
     """ 
     Check that the start is before the stop. 
     """ 
     if attrs['start'] > attrs['finish']: 
      raise serializers.ValidationError("finish must occur after start") 
     return attrs 

Это возвращает следующее:

{"non_field_errors": ["finish must occur after start"]} 

Мой вопрос, как я могу узнать, какие поля ответственны за неисправного проверки? В этом случае attrs ['start'] и attrs ['finish']. В конце концов, я хочу что-то вроде этого:

{"non_field_errors": ["finish must occur after start"], 
"start": ["finish must occur after start"], 
"finish": ["finish must occur after start"]} 

Так что я могу отметить ответственные поля формы. Надеюсь, вопрос ясен. Благодаря!

ответ

2

Когда вы создаете ValidationError, вы можете передать в словаре вместо строки. Словарь ожидает, что key - это имя поля, а value - строка ошибки.

def validate(self, attrs): 
    """ 
    Check that the start is before the stop. 
    """ 
    if attrs['start'] > attrs['finish']: 
     raise serializers.ValidationError({"finish": "finish must occur after start"}) 
    return attrs 

Это должно производить выход вдоль линий:

{"start": ["finish must occur after start"], 
"finish": ["finish must occur after start"]} 

который звучит как то, что вы ищете.

+0

Это именно то, что я хочу. Благодаря! – ilse2005

Смежные вопросы