APIView不会在“ POST”上从模型中调用方法.clean()。
我创建了一个“预算”模型,并通过覆盖方法.clean()添加了额外的验证。在django admin中使用clean时会正确调用。我还从该模型创建了APIView'BudgetReportView',但是未在方法“ POST”上调用方法.clean()。
我正在寻找解决此问题的最佳实践。我还应该在我的APIView中添加验证还是覆盖方法post和trigger .clean()?
感谢您的建议
(我不包含代码,因为这只是最佳实践的问题,但是我可以在需要时添加它。)
答案 0 :(得分:0)
从3.1版开始,Django-Rest-Framework不再开箱即用地调用模型验证方法,但是您可以在序列化器的validate()
方法中手动调用它们:
from django.core.exceptions import ValidationError
class MyModelSerializer(serializers.ModelSerializer):
def validate(self, data):
instance = Model(**data)
try:
instance.clean()
# Note that this raises Django's ValidationError Exception
except ValidationError as e:
raise serializers.ValidationError(e.args[0])