如何避免Django Forms和Django Rest Framework Serializers中的代码重复?

时间:2015-11-03 16:38:39

标签: django django-forms django-rest-framework

我在Django 1.8项目上工作,该项目必须同时公开传统的HTML前端和JSON API。对于API,我们使用Django Rest Framework。在与Rails合作之后,我尝试遵循" Fat Models"模式并在模型中尽可能多地进行验证并远离表单。但是,有时候,必须在表单级别进行自定义验证。

示例:我的Image模型具有GenericForeignKey字段,可能与系统中的任何模型相关。这些图片还有profile(例如'徽标'横幅'等)。根据配置文件,我需要进行不同的验证。原则上我只是为不同的配置文件创建不同的表单类,但也应该可以通过API将图像分配给对象。如何避免在表单和序列化程序中重复此自定义验证?

1 个答案:

答案 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

这样我可以重复使用表单验证并同时添加自定义序列化验证+使用两个内置验证器。

让我知道这是否有帮助,如果没有,也许你可以抛出一些代码片段,所以我们可以弄清楚你的具体情况。