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