簡體   English   中英

如何在 Django REST 中使用驗證器方法驗證模型字段?

[英]How to validate model field using validator method in Django REST?

我想在通過 API 保存對象的同時驗證電子郵件。 我正在使用模型驗證,但它在通過 API 保存邀請對象時不起作用,只有當我們通過管理面板創建對象時它才起作用。

模型.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])

Django 文檔說:

請注意,當您保存模型時,驗證器不會自動運行,但如果您使用的是 ModelForm,它將在表單中包含的任何字段上運行您的驗證器

DRF 文檔說:

使用 REST 框架,驗證完全在序列化器類上執行

這意味着為了通過 api 驗證模型實例的創建,您需要在 Serializer 類中定義所有驗證。

嘗試通過Model.clean()對其進行驗證

請注意,當您保存模型時,驗證器不會自動運行,但如果您使用的是 ModelForm,它將在表單中包含的任何字段上運行您的驗證器。

使用序列化程序來驗證模型屬性。 https://www.django-rest-framework.org/api-guide/serializers/#validation

序列化程序.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") 

暫無
暫無

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

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