当我们比较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)
我不鼓励在序列化器中调用模型的验证。也许我使用错误,所以这里的哲学是什么?
谢谢。