2010-11-29 67 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')