我在Django 1.8项目上工作,该项目必须同时公开传统的HTML前端和JSON API。对于API,我们使用Django Rest Framework。在与Rails合作之后,我尝试遵循" Fat Models"模式并在模型中尽可能多地进行验证并远离表单。但是,有时候,必须在表单级别进行自定义验证。
示例:我的Image
模型具有GenericForeignKey
字段,可能与系统中的任何模型相关。这些图片还有profile
(例如'徽标'横幅'等)。根据配置文件,我需要进行不同的验证。原则上我只是为不同的配置文件创建不同的表单类,但也应该可以通过API将图像分配给对象。如何避免在表单和序列化程序中重复此自定义验证?
答案 0 :(得分:2)
我通常在我的序列化程序中执行此操作:
def validate(self, attrs):
# custom serializer validation
self.myform = self.myform_class(
data=attrs
}
if not self.myform.is_valid():
raise serializers.ValidationError()
return attrs
这样我可以重复使用表单验证并同时添加自定义序列化验证+使用两个内置验证器。
让我知道这是否有帮助,如果没有,也许你可以抛出一些代码片段,所以我们可以弄清楚你的具体情况。