Как очистить данные формы в зависимости от пользователя, вошедшего в систему в административной панели django? - PullRequest
4 голосов
/ 13 апреля 2010

Я рассмотрел несколько вопросов, которые выглядели одинаково, но ни один из них не обсуждал проблему с точки зрения админ-панели.

Мне нужно проверить, есть ли у пользователя разрешение оставить поле пустым. Я хотел использовать request.user, но не знаю, как передать запрос из EntryAdmin в ModelForm. Я хотел сделать что-то вроде этого:

class EntryAdminForm(ModelForm):
    class Meta:
        model = Entry

    def clean_category(self):
        if not self.request.user.has_perm('blog.can_leave_empty_category') and not bool(self.category):
            raise ValidationError(u'You need to choose a Category!')
        else:
            return self.cleaned_data['category']

1 Ответ

3 голосов
/ 13 апреля 2010

Вы можете переопределить ModelAdmin.get_form, добавив запрос как атрибут вновь созданного класса формы (должен быть потокобезопасным).

Что-то вроде этого:

class EntryAdmin(admin.ModelAdmin):
    form = EntryAdminForm

    def get_form(self, request, *args, **kwargs):
        form = super(EntryAdmin, self).get_form(request, *args, **kwargs)
        form.request = request
        return form

Тогда код в вашем вопросе должен работать.

...