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

标签 python django

我有一个带有 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/

相关文章:

python - 如何使用 Pandas 读取 CSV,并且只将其读入 1 列而没有 Sep 或 Delimiter

python - 有人在 GS1 XML 和 AS2 EDI 中使用 Python 吗?

需要 Python 正则表达式帮助

python - 如何在 Pandas 的多列中按数据集分组

python - 在 Mac OS X 10.9.5 上安装 MySQLdb

python - 发布请求 Django REST 框架

django - 查询 Django 模型的 JSONField 的内容

python - 如果该对象的类在另一个 boost 模块中声明,如何使用 boost 将指向 C++ 对象的指针返回给 python?

python - 在 Django 中使用 AJAX 进行页面切换

python - 使用两个或多个不同的键查找 Django 模型