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'.
答案 0 :(得分:5)
Django User模型自动成为任何Django项目的一部分。也就是说,在运行syncdb
的同时,User模型将创建属于它的所有数据库表。您已为您的NetUser类创建了AbstractUser的子类,这意味着属于AbstractUser的所有字段也是NetUser的一部分。所以,现在你的数据库有这样的表......
作为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_MODELAUTH_USER_MODEL = 'myapp.NetUser'
docs:substituting-a-custom-user-model
PS:但是使用某种profile imho通常不那么痛苦了)