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

Ari*_*iel 5 django django-forms django-rest-framework

我正在研究一个必须暴露传统HTML前端和JSON API的Django 1.8项目.对于API,我们使用Django Rest Framework.在使用Rails之后,我尝试遵循"Fat Models"模式,并在模型中尽可能多地进行验证并远离表单.但是,有时候,必须在表单级别进行自定义验证.

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

mar*_*dev 4

我通常在序列化器中执行此操作:

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
Run Code Online (Sandbox Code Playgroud)

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

让我知道这是否有帮助,如果没有,也许你可以抛出一些代码片段,以便我们可以找出你的确切情况。