我已經創建了一個表單來刪除對象,但我需要檢查想要刪除該對象的用戶是否是創建該對象的用戶。我想檢查它的形式(以及在視圖中),因爲它是一個業務約束。在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