为什么Django Rest框架的序列化程序在保存之前无法系统地验证模型

时间:2018-11-21 15:16:45

标签: django django-rest-framework

当我们比较django形式的代码和django rest框架的序列化程序时,最后一个仅验证来自请求的新鲜数据,然后立即启动Model.save()而不是django形式使用的full_clean()。

有时候,我们需要在保存之前在实际的模型实例中检查数据,但是在这种情况下,应该使用序列化程序的run_validation / create / update覆盖,以便通过self.instance.clean/full_clean/...调用模型实例的验证,例如

class MySerializer(serializers.ModelSerializer):
    field = serializers.ReadOnlyField(source='xxx')

    class Meta:
        model = MyModel
        fields = (...)
        read_only_fields = (...)

    def run_validation(self, data=empty):
        self.instance.clean()
        return super(MySerializer, self).run_validation(data=data)

我不鼓励在序列化器中调用模型的验证。也许我使用错误,所以这里的哲学是什么?

谢谢。

0 个答案:

没有答案