在进行任何迁移之前,我已创建自定义用户模型,我想将其从应用程序面板移至管理页面中的身份验证面板。
为此,我创建了一个代理用户模型:
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)
问题是auth_permission表具有用户和proxyuser的权限。
无法理解为什么如果我使用代理并且仅创建了一个用户表,则权限表的行为就像是两个(代理用户和用户)一样。 我想念什么吗? 预先感谢
答案 0 :(得分:0)
您可能已经完成了所有迁移,而不仅仅是对应用程序进行了迁移,如果您未指定要迁移的应用程序,则Django会进行所有迁移。另一方面,如果您不这样做,也许您无法登录到管理站点。
答案 1 :(得分:0)
Django使用内容类型框架来跟踪各种模型的“权限”。代理模型拥有自己的权限。
这在authentication section of Django docs中有解释:
代理模型的工作方式与具体模型完全相同。使用代理模型自己的内容类型创建权限。代理模型不会继承其子类化的具体模型的权限
我觉得您要使用代理模型实现的目标是不必要的。我个人并不担心“用户”出现在Django Admin的单独部分中。相反,您将通过使用代理模型来增加代码的不必要的复杂性(将来的开发人员/您可能会想知道是否还要使用自定义User类或ProxyUser类)。