验证django-admin内联表单上的删除

dom*_*ino 5 django validation django-forms django-admin

我正在尝试执行验证,以便在他是管理员时无法删除用户.因此,如果用户是管理员并且已被标记为删除,我想检查并引发错误.

这是我的内联 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
Run Code Online (Sandbox Code Playgroud)

if bool(delete_checked):条件返回true,里面的东西if块被执行,但由于某种原因从来没有提出这个验证错误.有人可以向我解释原因吗?

更好的是,如果还有另一种更好的方法,请告诉我

dom*_*ino 7

我找到的解决方案是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')
Run Code Online (Sandbox Code Playgroud)