Подтверждение удаления на встроенных формах django-admin - PullRequest
5 голосов
/ 29 ноября 2010

Я пытаюсь выполнить проверку, чтобы вы не могли удалить пользователя, если он является администратором. Поэтому я хотел бы проверить и поднять ошибку, если есть пользователь, который является администратором и помечен для удаления.

Это мой встроенный 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, но по какой-то причине эта ошибка проверки не возникает Может кто-нибудь объяснить мне, почему?

Еще лучше, если есть другой лучший способ сделать это, пожалуйста, дайте мне знать

1 Ответ

7 голосов
/ 19 декабря 2010

Решение, которое я нашел, было clean в InlineFormSet вместо 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')
...