扩展Django Auth用户模型

时间:2014-11-28 07:38:32

标签: python django

admin.py

class NetUserInline(admin.StackedInline):
    model = NetUser

class UserProfileAdmin(UserAdmin):
    inlines = [NetUserInline, ]

admin.site.register(User, UserProfileAdmin)

models.py

class NetUser(AbstractUser):
    Net_30 = models.BooleanField(default=False)

site.register(NetUser)

我得到这样的错误。

django.core.management.base.CommandError: One or more models did not validate:
accounts.netuser: Accessor for m2m field 'groups' clashes with related m2m field 'Group.user_set'. Add a related_name argument to the definition for 'groups'.
accounts.netuser: Accessor for m2m field 'user_permissions' clashes with related m2m field 'Permission.user_set'. Add a related_name argument to the definition for 'user_permissions'.
auth.user: Accessor for m2m field 'groups' clashes with related m2m field 'Group.user_set'. Add a related_name argument to the definition for 'groups'.
auth.user: Accessor for m2m field 'user_permissions' clashes with related m2m field 'Permission.user_set'. Add a related_name argument to the definition for 'user_permissions'.

2 个答案:

答案 0 :(得分:5)

Django User模型自动成为任何Django项目的一部分。也就是说,在运行syncdb的同时,User模型将创建属于它的所有数据库表。您已为您的NetUser类创建了AbstractUser的子类,这意味着属于AbstractUser的所有字段也是NetUser的一部分。所以,现在你的数据库有这样的表......

  • 用户
    • 用户名
    • 密码
    • 电子邮件
    • ...
  • NetUser
    • 用户名
    • 密码
    • 电子邮件
    • ...
    • net_30

作为Django用户管理的一部分,创建了数据库表,用于管理用户在您的应用程序中拥有的组/权限。现在看来,该系统正在尝试连接标准用户模型和NetUser模型。我假设这是因为通过继承AbstractUser,Django尝试创建与该用户模型的所有关系。同时,如果您还没有指定使用自定义用户模型,那么Django将尝试对标准用户模型执行相同的操作。

documentation表示您必须通过将AUTH_USER_MODEL = 'Accounts.NetUser'添加到settings.py文件来指定用户模型的用途(如果不是默认值)。这告诉您的Django项目您正在使用自定义用户模型而不是连接到标准用户模型。现在两者都在发生。

此外,您应该将admin.site.register(User, UserProfileAdmin)更改为admin.site.register(NetUser, UserProfileAdmin),以便您的管理员后端正在查看您的自定义用户模型,而不是标准的Django用户模型。

答案 1 :(得分:0)

您可能忘记在settings.py

中设置AUTH_USER_MODEL
AUTH_USER_MODEL = 'myapp.NetUser'

docs:substituting-a-custom-user-model

PS:但是使用某种profile imho通常不那么痛苦了)