Django管理-如何在用户编辑中隐藏一些字段?

Django管理-如何在用户编辑中隐藏一些字段?,django,django-admin,django-users,Django,Django Admin,Django Users,如何在管理员用户编辑中隐藏字段?我主要想隐藏在某些例外情况下选择的权限和组,但排除变量不起作用:/django admin不是为非常细粒度的控制而设计的,因此它们不是为允许这种类型的控制而设计的自动变量 如果你需要这种类型的控制,你必须自己去做。您需要覆盖默认的管理模板。您可能希望使用权限系统来跟踪允许用户执行的操作 请记住您正在进行的定制级别。从某种意义上说,要远远超出管理应用程序的预期目的和限制,所做的工作将比简单地滚动您自己的更细粒度的CRUD系统要多。我回答这个问题可能会迟到,但无论如何

如何在管理员用户编辑中隐藏字段?我主要想隐藏在某些例外情况下选择的权限和组,但排除变量不起作用:/

django admin不是为非常细粒度的控制而设计的,因此它们不是为允许这种类型的控制而设计的自动变量

如果你需要这种类型的控制,你必须自己去做。您需要覆盖默认的管理模板。您可能希望使用权限系统来跟踪允许用户执行的操作


请记住您正在进行的定制级别。从某种意义上说,要远远超出管理应用程序的预期目的和限制,所做的工作将比简单地滚动您自己的更细粒度的CRUD系统要多。

我回答这个问题可能会迟到,但无论如何,我都会这样做。John在概念上是正确的,但我只是想这样做,因为我知道
django admin
非常灵活

在用户模型表单中隐藏字段的任何方式都是:

1。
ModelAdmin
类的
exclude
属性可用于隐藏字段

2:模型中应允许空白

3:
模型字段上的默认属性是一个优势,否则您可能会遇到意外错误

我遇到的问题是,我过去常常会遇到验证错误。我查看了追踪结果发现 该错误是由于
UserAdmin
fieldset
分组造成的,默认的
permission
字段集具有
user\u权限
在您的子刻度模型admin中覆盖该权限

使用
get_form
中的
exclude
属性,您可以访问
request
变量,并根据用户的权限或组动态设置它

代码:

admin.py:

class MyUserAdmin(UserAdmin): 

     list_display = ("username","first_name", "last_name", "email","is_active","is_staff","last_login","date_joined")

     ## Static overriding 
     fieldsets = (
         (None, {'fields': ('username', 'password')}),
         (_('Personal info'), {'fields': ('first_name', 'last_name', 'email')}),
         (_('Permissions'), {'fields': ('is_active', 'is_staff', 'is_superuser',
                                    'groups')}),
     (_('Important dates'), {'fields': ('last_login', 'date_joined')}),
     )


     def get_form(self, request, obj=None, **kwargs):
         self.exclude = ("user_permissions")
         ## Dynamically overriding
         self.fieldsets[2][1]["fields"] = ('is_active', 'is_staff','is_superuser','groups')
         form = super(MyUserAdmin,self).get_form(request, obj, **kwargs)
         return form

你可以实现非常高水平的细粒度控制,只要你真正阅读手册。我知道这是一个老问题,但是,这是线程安全吗
self.exclude
是一个类属性,因此可以获得不需要的结果。我认为方法是覆盖新的
get\u字段
get\u字段集
等方法。我说得对吗?@argaen你说得对;初始化后分配给
self.exclude
(或任何其他类属性,如
fields
readonly\u fields
等)是不安全的,因为每个进程只创建了一个
ModelAdmin
实例。必须使用
get\u fields()
和类似方法动态更改显示的字段。