django.core.management.base.SystemCheckError
Django 内置的 User
模型之间存在冲突
django.core.management.base.SystemCheckError: SystemCheckError: System check identified some issues:ERRORS:
auth.User.groups: (fields.E304) Reverse accessor 'Group.user_set' for 'auth.User.groups' clashes with reverse accessor for 'webapp.Suser.groups'.HINT: Add or change a related_name argument to the definition for 'auth.User.groups' or 'webapp.Suser.groups'.
auth.User.user_permissions: (fields.E304) Reverse accessor 'Permission.user_set' for 'auth.User.user_permissions' clashes with reverse accessor for 'webapp.Suser.user_permissions'.HINT: Add or change a related_name argument to the definition for 'auth.User.user_permissions' or 'webapp.Suser.user_permissions'.
问题详情:
\1. auth.User.groups
和 auth.User.user_permissions
与 webapp.Suser
的冲突
Django 的内置 User
模型已经定义了 groups
和 user_permissions
字段,这些字段与 Group
和 Permission
模型有反向关系。当您在自定义用户模型 Suser
中继承 AbstractBaseUser
和 PermissionsMixin
时,也会有类似的字段和反向关系,这就导致了冲突。‘’
解决办法:
from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin, BaseUserManagerclass Suser(AbstractBaseUser, PermissionsMixin):email = models.EmailField(verbose_name='邮箱', max_length=255, unique=True)username = models.CharField(max_length=50, verbose_name='用户名')is_active = models.BooleanField(default=True, verbose_name='激活用户')is_staff = models.BooleanField(default=False, verbose_name='职员状态')# 其他字段...groups = models.ManyToManyField('auth.Group',related_name='suser_groups', # 添加 related_name 以避免冲突verbose_name='groups',blank=True,help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.',related_query_name='suser',)user_permissions = models.ManyToManyField('auth.Permission',related_name='suser_permissions', # 添加 related_name 以避免冲突verbose_name='user permissions',blank=True,help_text='Specific permissions for this user.',related_query_name='suser',)