【问题标题】:Django: How to remove fields from the admin form for specific users?Django:如何从特定用户的管理表单中删除字段?
【发布时间】:2011-09-10 10:03:27
【问题描述】:

我的管理员看起来像这样(没有排除变量):

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

我正在尝试删除用户的 added_by 字段,因为我希望从会话中填充该字段。我尝试了以下方法:

但是,我得到的每一个:KeyError while rendering: Key 'added_by' not found in Form。看来我需要在表单渲染过程中更早地删除该字段,但我不知道在哪里执行此操作。

那么如何才能为普通用户排除added_by 字段呢?

【问题讨论】:

  • 如何从表单中删除added_by 字段?那一点不在您发布的代码中。

标签: django forms django-admin


【解决方案1】:

在评估 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

【讨论】:

  • 是的,您在 ModelAdmin 上设置 exclude 和 list_display 实例化其表单
  • 嗯,再三考虑 - 感谢您的投票 :-) - list_display 不被表单使用,它被更改列表使用。问题只是顺序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-20
  • 2011-11-23
相关资源
最近更新 更多