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

标签 django django-forms django-rest-framework

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

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

最佳答案

我通常在我的序列化程序中这样做:

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

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

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

关于django - 如何避免 Django Forms 和 Django Rest Framework Serializers 中的代码重复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33504482/

相关文章:

python - django View if 语句不适用于 boolean 值

django - 使用字符串访问模型的外键相关字段?

django - 如何在没有 Mercurial 文件的情况下将 Django 部署到生产服务器?

Django help_text

django-rest-framework - Django Rest Framework - 在保存到数据库之前检查/操作数据(通过某种逻辑)

python - django rest框架中日期的国际化?

python - Django 下载的文件名

django - 在 View 中使用数据库中的数据填充Django表单

python下划线函数名

javascript - 使用 django REST 和 Vue.js 传播不可迭代实例的无效尝试