鹡鸰模型管理员。自定义用户的几个部分

Posted

技术标签:

【中文标题】鹡鸰模型管理员。自定义用户的几个部分【英文标题】:Wagtail ModelAdmin. Several sections for custom User 【发布时间】:2019-03-13 02:09:15 【问题描述】:

我正在尝试为现有的自定义用户模型设置 Wagtail。根据要求,应该有几个用户页面可用,代表不同类型的用户(普通用户、经理等) 我尝试为每种情况制作单独的 ModelAdmin,覆盖 get_queryset 以按用户类型进行过滤。但看起来它们都显示了 ModelAdmin 的第一个定义,因为它们都有模型 - 用户

然后我尝试使用代理模型,在这种情况下根本没有显示,因为Wagtail似乎不支持代理模型。

我现在看到的唯一选择是创建自己的视图并添加指向它的菜单项

请建议在 Wagtail 中实现这一目标的最佳/最简单方法是什么

【问题讨论】:

【参考方案1】:

Wagtail Admin 实际上适用于代理模型。缺少的部分是 Wagtail 权限部分不包含代理模型,因此您必须手动添加它:

from wagtail.contrib.modeladmin.helpers import PermissionHelper

class ProxyModelPermissionHelper(PermissionHelper):
    def user_can_list(self, user):
        return True

ModelAdmin:

permission_helper_class = ProxyModelPermissionHelper

【讨论】:

这确实可以使模型出现在左侧导航中,但是,在管理员中编辑组时,它们不会与权限列表中的其他模型一起出现。你遇到过这个问题吗?【参考方案2】:

Wagtail 2.5 现在支持 Django 2.2,Django 2.2 现在使用代理模型的内容类型而不是具体模型的内容类型为代理模型创建权限。 Wagtail 目前不支持setting proxy model permissions in the Wagtail admin,但是如果您更新到 Wagtail 2.5/Django 2.2,您可以使用 Django 管理员为代理模型设置组权限,并且不需要permission_helper_class 就可以了。

我正在为组分配用户权限,与以下 Github 问题中的讨论相反,我惊讶地发现所有代理模型在 Wagtail 2.5/Django 2.2 更新后都正确显示(请参阅此 Github issue 和评论这可能是因为代理模型在ModelAdmin 中注册)。我已确认代理模型必须在ModelAdmin 注册才能出现在组权限屏幕中。

不要忘记在更新到 Django 2.2 后运行 migrate,因为有一个迁移将通过将内容类型从基本模型切换到代理模型来迁移任何现有的代理模型权限。

【讨论】:

以上是关于鹡鸰模型管理员。自定义用户的几个部分的主要内容,如果未能解决你的问题,请参考以下文章

Django 管理员无法使用自定义用户模型正确登录

管理员中的 Django 自定义用户模型,关系“auth_user”不存在

鹡鸰中的分页

管理信息系统 第三部分

Django 自定义用户模型和超级用户

管理信息系统 第三部分 作业