Как выполнить проверку уровня объекта в Django Rest Framework? - PullRequest
0 голосов
/ 19 января 2019

serializer.py

class ExamTermSerializer(serializers.Serializer):
    name = serializers.CharField()
    start_date = serializers.DateField()
    end_date = serializers.DateField()
    course = serializers.IntegerField()
    _class = serializers.IntegerField()

def validate(self,data):
    if data['start_date'] > data['end_date']:
        raise serializers.ValidationError("Start Date Should be smaller") 
    return data

views.py

 ###Bunch of code..
       _exm,c = ExamTerm.objects.get_or_create(name = data['name'],
                                                    defaults = {
                                                        'start_date':data['start_date'],
                                                        'end_date':data['end_date'],
                                                        'course_id':data['course'],
                                                        '_class_id':data['_class']
                                                    })
                if not c:
                    raise serializers.ValidationError({
                    "Detail":['Exam With This name Already Exist']
                                                })
                return Response(data , status=status.HTTP_201_CREATED)

При поиске проверки уровня объекта в DRF я обнаружил, что это функция проверки, которую я написал в сериализаторе (т. Е. validate).

Моя настоящая проблема в том, как реализовать эту validate функцию из представлений так, чтобы start_date всегда был меньше end_date.

1 Ответ

0 голосов
/ 20 января 2019

Вам необходимо переопределить save() метод вашей ExamTerm модели

def save(self,*args,**kwargs):
    if not self.start_date > self.end_date:
        super(ExamTerm,self).save(*args,**kwargs)
    else:
        raise ValidationError('start date can not be greater than end date')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...