我有一个带有 PermissionsMixin
的简单 MyUser
类。 user.is_superuser
仅对 super 用户等于 True
。我希望能够在我的 admin.py
中执行与此类似的操作:
if request.user.is_superuser:
fieldsets = (
(None, {'fields': ('email', 'password')}),
('Permissions', {'fields': ('is_admin','is_staff')}),
('Place', {'fields': ('place',)}),
('Important dates', {'fields': ('last_login',)}),
)
else:
fieldsets = (
(None, {'fields': ('email', 'password')}),
#('Permissions', {'fields': ('is_admin','is_staff')}),
('Place', {'fields': ('place',)}),
('Important dates', {'fields': ('last_login',)}),
)
基本上我希望我的用户能够创建其他用户,但不授予他们管理员或其他权限。只有 super 用户才能这样做。
最佳答案
接受的答案很接近,但正如其他人指出的那样,get_form 在 Admin 模型的同一个实例上被多次调用并且该实例被重用,因此您最终可能会重复字段或其他用户看到 self.fields 之后的字段被修改。在 Django <=1.6 中试试这个:
class MyAdmin(admin.ModelAdmin):
normaluser_fields = ['field1','field2']
superuser_fields = ['special_field1','special_field2']
def get_form(self, request, obj=None, **kwargs):
if request.user.is_superuser:
self.fields = self.normaluser_fields + self.superuser_fields
else:
self.fields = self.normaluser_fields
return super(MyAdmin, self).get_form(request, obj, **kwargs)
看起来,Django 1.7 引入了一个您可以覆盖的 get_fields() 方法,这是一种更好的方法:
关于python - 为 super 用户以外的用户排除 Django 管理中的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19203067/