Django如何从管理员创建自定义用户?

时间:2017-10-04 09:02:02

标签: python django

所以我有这个方法:

def create_editor(self, email, dob, password):
    user = self.create_user(
        email,
        dob,
        accepted_tos=True,
        password=password
    )

    try:
        editors = Group.objects.get(name__iexact="Editors")
    except Group.DoesNotExist:
        editors = Group.objects.create(name="Editors")

    editors.permissions.add(Permission.objects.get(codename="can_give_discount")) # add can_give_discount permission
    user.groups.add(editors)
    user.save()
    return user

创建普通用户,然后将用户添加到editor

我希望能够从普通的django admin创建一个经理。

所以在下图中我想要另一个名为Add Manager

的按钮

django admin add user

3 个答案:

答案 0 :(得分:0)

首先看起来你想要做的是创建一个新的Manager模型,该模型对用户有一个外键。然后从管理员端,您可以选择首先单击添加用户,然后导航到Manager模型并添加管理器(您还提供用户ID,以便它们通过foreignkey链接)。

但是,如果只是为了容纳权限和组,您还可以转到django admin中的groups模型。

答案 1 :(得分:0)

Spoiler警告,django管理员并不是真的用于自定义。但是有一些人认为django准备好了,请在这里查看django管理员文档https://docs.djangoproject.com/en/1.11/ref/contrib/admin/#custom-template-options

这可能是您扩展/覆盖现有创建用户模板的解决方案(请参阅此处:https://docs.djangoproject.com/en/1.11/ref/contrib/admin/#overriding-vs-replacing-an-admin-template),例如添加使新用户成为编辑者的广告标志,您可以覆盖User.objects.create()方法以使用该标志。

工作量最少但步骤为2的解决方案是添加管理操作(如果您希望详细视图中的按钮:django对象操作https://github.com/crccheck/django-object-actions)到"升级"编辑的普通用户。

答案 2 :(得分:0)

或许您可以添加另一个选择字段来扩展用户以说明添加的人是“编辑”还是“管理员”,并在保存时检查添加的用户是“经理”还是“编辑”,并覆盖保存以添加新用户到相应的组。