2010-11-29 74 views
5

我想執行驗證,如果他是管理員,你不能刪除用戶。因此,如果有用戶是管理員並且已被標記爲刪除,則我想檢查並提出錯誤。驗證在Django的管理內聯表格刪除

這是我的直列ModelForm

class UserGroupsForm(forms.ModelForm): 
    class Meta: 
     model = UserGroups 

    def clean(self): 
     delete_checked = self.fields['DELETE'].widget.value_from_datadict(
      self.data, self.files, self.add_prefix('DELETE')) 
     if bool(delete_checked): 
      #if user is admin of group x 
      raise forms.ValidationError('You cannot delete a user that is the group administrator') 

     return self.cleaned_data 

if bool(delete_checked):條件返回true,裏面的東西的if塊被執行,但由於某種原因,這個驗證錯誤是從未提出。有人可以向我解釋爲什麼?

更妙的是,如果有另一種更好的方式來做到這一點,請讓我知道

回答

6

我找到的解決方案是cleanInlineFormSet代替ModelForm

class UserGroupsInlineFormset(forms.models.BaseInlineFormSet): 

    def clean(self): 
     delete_checked = False 

     for form in self.forms: 
      try: 
       if form.cleaned_data: 
        if form.cleaned_data['DELETE']: 
         delete_checked = True 

      except AttributeError: 
       pass 

     if delete_checked: 
      raise forms.ValidationError(u'You cannot delete a user that is the group administrator')