关于django:以删除形式验证

Validation in a delete form

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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.


实际上,这应该发生在clean方法中:这是验证的地方。这样做的主要原因是您可以按照正常的方法进行验证,这是为了引发一个validationError,它将被表单API捕获并作为一个错误显示。

您当然不想在__init__中执行此操作,因为这样即使表单最初显示时也会产生错误,而且delete太晚了。