我创建了一个删除对象的表单,但我需要检查要删除该对象的用户是否是创建该对象的用户。我想在表单(以及视图)中检查它,因为它是一个业务约束。在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.
答案 0 :(得分:1)
真的应该在clean
方法中进行:这是验证的地方。这样做的主要原因是你可以按照常规方法进行验证,即提出一个ValidationError,它将被表单API捕获并显示为错误。
您当然不希望在__init__
中执行此操作,因为即使最初显示表单时也会引发错误,delete
为时已晚。