Python 如何在Django REST中使用validator方法验证模型字段?

Python 如何在Django REST中使用validator方法验证模型字段?,python,django,django-rest-framework,Python,Django,Django Rest Framework,我想在通过API保存对象时验证电子邮件。 我正在使用模型验证,但在通过API保存邀请对象时它不起作用,只有在通过管理面板创建对象时它才起作用 models.py def validate_email(value): if "@gmail.com" in value: return value else: raise ValidationError("This field accepts mail id of google only")

我想在通过API保存对象时验证电子邮件。 我正在使用模型验证,但在通过API保存邀请对象时它不起作用,只有在通过管理面板创建对象时它才起作用

models.py

def validate_email(value): 
    if "@gmail.com" in value: 
        return value 
    else: 
        raise ValidationError("This field accepts mail id of google only") 


class Invitation(models.Model):
    email = models.EmailField(validators=[validate_email])
报告说:

请注意,保存模型时不会自动运行验证程序,但如果您使用的是ModelForm,它将在表单中包含的任何字段上运行验证程序

报告说:

使用REST框架,验证完全在序列化程序类上执行


这意味着为了通过api验证模型实例创建,您需要在序列化程序类tself中定义所有验证。

尝试通过

请注意,保存模型时不会自动运行验证程序,但如果您使用的是ModelForm,它将在表单中包含的任何字段上运行验证程序

使用序列化程序验证模型属性。

序列化程序.py

from rest_framework import serializers
class Invitation(serializers.Serializer):
    email = models.EmailField()


    def validate_email(self, value):
        if "@gmail.com" in value: 
            return value 
        else: 
            raise ValidationError("This field accepts mail id of google only") 


它在我的机器上工作。我在DRF的帮助下进行了测试。当我通过API保存对象时,它只在通过admin保存对象时工作