django用户自定义模型身份验证和授权

时间:2020-05-09 03:30:54

标签: django django-models

在进行任何迁移之前,我已创建自定义用户模型,我想将其从应用程序面板移至管理页面中的身份验证面板。

为此,我创建了一个代理用户模型:

class User(AbstractUser):
    pass

class ProxyUser(User):
    pass

    class Meta:
        app_label = 'auth'
        proxy = True

,然后在admin.py中:

from django.contrib.auth.admin import UserAdmin
from .models import ProxyUser

admin.site.register(ProxyUser, UserAdmin)  

enter image description here

问题是auth_permission表具有用户和proxyuser的权限。 enter image description here

enter image description here enter image description here

无法理解为什么如果我使用代理并且仅创建了一个用户表,则权限表的行为就像是两个(代理用户和用户)一样。 我想念什么吗? 预先感谢

2 个答案:

答案 0 :(得分:0)

您可能已经完成了所有迁移,而不仅仅是对应用程序进行了迁移,如果您未指定要迁移的应用程序,则Django会进行所有迁移。另一方面,如果您不这样做,也许您无法登录到管理站点。

答案 1 :(得分:0)

Django使用内容类型框架来跟踪各种模型的“权限”。代理模型拥有自己的权限。

这在authentication section of Django docs中有解释:

代理模型的工作方式与具体模型完全相同。使用代理模型自己的内容类型创建权限。代理模型不会继承其子类化的具体模型的权限

我觉得您要使用代理模型实现的目标是不必要的。我个人并不担心“用户”出现在Django Admin的单独部分中。相反,您将通过使用代理模型来增加代码的不必要的复杂性(将来的开发人员/您可能会想知道是否还要使用自定义User类或ProxyUser类)。