gpt4 book ai didi

python - 为 super 用户以外的用户排除 Django 管理中的字段

转载 作者:太空狗 更新时间:2023-10-29 17:10:58 29 4
gpt4 key购买 nike

我有一个带有 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() 方法,这是一种更好的方法:

https://github.com/django/django/blob/d450af8a2687ca2e90a8790eb567f9a25ebce85b/django/contrib/admin/options.py#L276

关于python - 为 super 用户以外的用户排除 Django 管理中的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19203067/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com