首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >DRF和Django管理的通用自定义验证

DRF和Django管理的通用自定义验证
EN

Stack Overflow用户
提问于 2017-01-09 06:23:33
回答 2查看 2.3K关注 0票数 6

我有用户表,其中必须对工作人员用户设置唯一的电子邮件限制,对非工作人员用户设置唯一的电话约束。现在,我想在DRF API和Django admin中维护这个约束,如何在不重复代码的情况下实现这一点。

从DRF 3.0开始,所有验证都是针对序列化程序显式执行的(如果我已经重写了unique_validation或clean方法来执行条件验证,我也必须为序列化程序分别编写这个自定义验证),那么如何编写一个既适用于DRF,又适用于Django管理的自定义验证,而不需要重复代码呢?

EN

Stack Overflow用户

发布于 2017-01-09 16:56:30

FOR API:为UserRegistration创建一个序列化程序,并使用两个条件实现验证方法,一个条件是唯一的电子邮件,另一个条件是电话号码。类似于:

代码语言:javascript
运行
复制
class UserCreateSerializer(ModelSerializer):
   class Meta:
        model = User
        fields = ['email','phone','...']
   def validate(self, data):
        """user email phone validator """

        user_qs = User.objects.filter(email=data['email'], is_staff=True)
        if user_qs.exists():
            raise ValidationError({"email":"This user has already registered."})
        user_phone = User.objects.filter(phone=data['phone'], is_active=True, is_staff=False)
        if user_phone.exists():
            raise ValidationError({"phone":"Phone number already exists."})
        return data

FOR WEB: --如果您已经创建了表单以便注册,那么在表单中实现clean方法,在序列化程序中进行验证,如上面所示。

代码语言:javascript
运行
复制
class UserCreateForm(ModelForm):

    class Meta:
            model = User
            fields = ['email','phone','...']
    def clean(self):
            """user email phone validator """

            user_qs = User.objects.filter(email=self.cleaned_data['email'], is_staff=True)
            if user_qs.exists():
                raise ValidationError({"email":"This user has already registered."})
            user_phone = User.objects.filter(phone=self.cleaned_data['phone'], is_active=True, is_staff=False)
            if user_phone.exists():
                raise ValidationError({"phone":"Phone number already exists."})
            return data
票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41542100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档