【发布时间】:2017-01-09 06:23:33
【问题描述】:
我有一个用户表,其中必须对员工用户设置唯一的电子邮件限制,对非员工用户设置唯一的电话限制。现在我想在 DRF API 和 Django 管理员中维护这个约束,如何在不重复代码的情况下实现这一点。
正如我从 DRF 3.0 开始看到的那样,所有验证都是为序列化程序显式执行的(如果我覆盖了 unique_validation 或 clean 方法来执行条件验证,我也必须为序列化程序单独编写这个自定义验证)所以如何编写适用于 DRF API 和 Django 管理员的自定义验证,无需重复代码?
【问题讨论】:
-
在模型级别添加验证器
-
@utkbansal 但根据 DRF 文档,模型级别验证将不适用于 DRF 序列化程序 django-rest-framework.org/api-guide/validators“使用 REST 框架,验证完全在序列化程序类上执行。”
-
@r.bhardwaj 您应该将约束添加到模型级别。然后在序列化程序和管理表单或管理类本身中尝试/捕获异常。无法为 admin 和 APIView 创建通用验证
-
@IvanSemochkin 明白了。但是这里有一个更好的解决方案stackoverflow.com/questions/32921956/…你怎么看?
标签: django django-rest-framework