删除表单中的验证

时间:2014-09-11 12:58:16

标签: django django-forms

我创建了一个删除对象的表单,但我需要检查要删除该对象的用户是否是创建该对象的用户。我想在表单(以及视图)中检查它,因为它是一个业务约束。在init,delete或clean方法中检查它的最佳位置在哪里?

class DeleteFooForm(forms.ModelForm):
    class Meta:
        model = Foo
        fields = []

        def __init__(self, user, *args, **kwargs):
            super(DeleteFooForm, self).__init__(*args, **kwargs)
            self.user = user

        def delete(self):
            if self.user is not self.instance.user:
                raise PermissionDenied("Wrong user")        

            self.instance.delete()

            # more actions, send email, etc.

1 个答案:

答案 0 :(得分:1)

真的应该在clean方法中进行:这是验证的地方。这样做的主要原因是你可以按照常规方法进行验证,即提出一个ValidationError,它将被表单API捕获并显示为错误。

您当然不希望在__init__中执行此操作,因为即使最初显示表单时也会引发错误,delete为时已晚。