Django:如何从特定用户的管理表单中删除字段?

标签 django forms django-admin

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

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 字段,因为我更愿意从 session 中填充它。我尝试了以下方法:
  • Django admin - remove field if editing an object
  • Remove fields from ModelForm
  • http://www.mdgart.com/2010/04/08/django-admin-how-to-hide-fields-in-a-form-for-certain-users-that-are-not-superusers/

  • 然而,我得到的每一个:KeyError while rendering: Key 'added_by' not found in Form .似乎我需要在表单渲染过程中更早地删除该字段,但我被困在何处执行此操作。

    那么如何排除 added_by普通用户的领域?

    最佳答案

    在评估 list_display 时,您可能会收到该错误。您无法显示已排除的字段。去掉了 added_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
    

    关于Django:如何从特定用户的管理表单中删除字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6271490/

    相关文章:

    Django 字段查询处理

    python - 如何在 Django 中排队请求?

    asp.net - MVC 5 单个 View 中的多个模型

    python - 禁止用户并将其添加到表中时出现问题

    django - centos上设置nginx+django服务时uwsgi无法加载app

    python - Django:运行 manage.py 总是中止

    jquery - x-editable - 在输入焦点上,选择所有文本?

    javascript - 表单操作与 AJAX 请求 - 发送 JSON

    python - 如何限制对 Django 管理页面的访问?

    python - 如何在django admin中分类?