我已经创建了一个表单来删除对象,但我需要检查想要删除该对象的用户是否是创建该对象的用户。我想检查它的形式(以及在视图中),因为它是一个业务约束。在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.
在窗体中,您无权访问请求对象,因此它是验证权限的错误位置。在视图中执行此操作,并使用消息框架将错误刷新到用户。 – 2014-09-11 13:02:32
我个人建议在'clean()'方法中执行它,因为它是一种形式约束,它使表单无效(以某种方式)。 – Wolph 2014-09-11 13:04:55
@PauloScardine,我完全不同意。该表格是*绝对*做验证的合适地点:这就是它的主要用途。没有理由在两个不同的地方进行验证。 – 2014-09-11 13:22:14