Django: Как удалить поля из формы администратора для конкретных пользователей? - PullRequest
3 голосов
/ 08 июня 2011

Мой админ выглядит так (без переменной исключения):

class MovieAdmin(models.ModelAdmin)
    fields = ('name', 'slug', 'imdb_link', 'start', 'finish', 'added_by')
    list_display = ('name', 'finish', 'added_by')
    list_filter = ('finish',)
    ordering = ('-finish',)
    prepopulated_fields = {'slug': ('name',)}

    form = MovieAdminForm

    def get_form(self, request, obj=None, **kwargs):
        form = super(MovieAdmin, self).get_form(request, obj, **kwargs)
        form.current_user = request.user
        return form

admin.site.register(Movie, MovieAdmin)

Форма:

class MovieAdminForm(forms.ModelForm):

    class Meta:
        model = Movie

    def save(self, commit=False):
        instance = super(MovieAdminForm, self).save(commit=commit)
        if not instance.pk and not self.current_user.is_superuser:
            if not self.current_user.profile.is_manager:
                instance.added_by = self.current_user.profile
        instance.save()
        return instance

Я пытаюсь удалить поле add_by для пользователей, так как я 'Я предпочел бы заполнить это из сессииЯ пробовал методы из следующих:

Однако с каждым я получаю: KeyError while rendering: Key 'added_by' not found in Form.Кажется, мне нужно удалить поле ранее в процессе рендеринга формы, но я застрял на том, где это сделать.

Так, как я могу исключить поле added_by для обычных пользователей?

1 Ответ

14 голосов
/ 08 июня 2011

Вероятно, вы получаете эту ошибку при оценке list_display. Вы не можете показать поле, которое исключено. Версии с удаленным add_by также требуется соответствующий list_display.

def get_form(self, request, obj=None, **kwargs):
    current_user = request.user
    if not current_user.profile.is_manager:
        self.exclude = ('added_by',)
        self.list_display = ('name', 'finish')
    form = super(MovieAdmin, self).get_form(request, obj, **kwargs)
    form.current_user = current_user
    return form
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...