簡體   English   中英

如何在Django Rest Framework中執行對象級驗證?

[英]How to perform object level validation in Django Rest Framework?

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

您需要覆蓋ExamTerm模型的save()方法

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')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM