从视图集调用时未触发模型的方法.clean()

时间:2019-02-15 09:13:39

标签: django django-models django-rest-framework

APIView不会在“ POST”上从模型中调用方法.clean()。

我创建了一个“预算”模型,并通过覆盖方法.clean()添加了额外的验证。在django admin中使用clean时会正确调用。我还从该模型创建了APIView'BudgetReportView',但是未在方法“ POST”上调用方法.clean()。

我正在寻找解决此问题的最佳实践。我还应该在我的APIView中添加验证还是覆盖方法post和trigger .clean()?

感谢您的建议

(我不包含代码,因为这只是最佳实践的问题,但是我可以在需要时添加它。)

1 个答案:

答案 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])