【问题标题】:tweak the django admin default permission调整 django 管理员默认权限
【发布时间】:2015-02-05 20:21:26
【问题描述】:

我不知道这是否可能,但这就是我想要实现的目标。

django admin 中有三个默认权限。添加/更改/删除。

我想要的是“查看”权限,有点像“更改”权限,但不能编辑。

我有一个 Country 模型,当一个客户端被创建时,它需要选择一个国家作为它的外键。

但是如果我将此字段设置为只读,它将无法根据需要选择国家。因此,我必须授予用户“更改”权限,以便在用户创建客户信息时可以使用国家/地区。

给“更改”权限很好,但如果它有“查看”权限会更好。

我进行了很多搜索,但没有找到“完美”的解决方案。

我想肯定有很多人也想要这个权限。

那么如何使这个自定义的“查看”权限并与 django admin 顺利集成。

【问题讨论】:

标签: python django django-admin


【解决方案1】:

希望对你有帮助:

class Client(models.Model):
    name = models.CharField(...)
    readonlyfield = models.CharField(...)
    country = models.ForeignKey(...)

    class Meta:
        permissions = (
            ("change_country", "Can change country"),
        )

class ClientAdmin(admin.ModelAdmin):
    fields = ['name', 'readonlyfield', 'country']

    def get_readonly_fields(self, request, obj=None):
        if obj and not request.user.has_perm('yourapp.change_country'):
            return['readonlyfield', 'country']
        else:
            return['readonlyfield']

因此,如果用户没有 change_country 权限,他将设置 country 字段一次(在创建时)

【讨论】: