我正在构建一个具有3个用户角色的平台:管理员,创建者和品牌。我重新定义了默认的django用户,使其能够通过电子邮件登录。
D/SystemWebChromeClient: http://localhost/vendor-es2015.js: Line 44076 : ERROR [object Object]
I/chromium: [INFO:CONSOLE(44076)] “ERROR [object Object]”, source: http://localhost/vendor-es2015.js (44076)
我将该类作为抽象类,以便能够添加新类,从Abstract类继承并重新定义其属性。
class AbstractUser(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(max_length=32, unique=True)
first_name = models.CharField(max_length=32, blank=True)
last_name = models.CharField(max_length=64, blank=True)
is_staff = models.BooleanField(default=False)
is_superuser = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
date_joined = models.DateTimeField(auto_now_add=True)
location = models.CharField(max_length=120, blank=True)
bio = models.TextField(blank=True)
USERNAME_FIELD = 'email'
EMAIL_FIELD = 'email'
REQUIRED_FIELDS = []
objects = CustomUserManager()
class Meta:
abstract = True
def __str__(self):
return self.email
我还添加了settings.py,如下:
class PlatformAdmin(AbstractUser):
pass
class Creator(AbstractUser):
email = models.EmailField(max_length=32, unique=True, error_messages={
'unique': "A customer with that email already exists.",
})
class Brand(AbstractUser):
name = models.CharField(max_length=64)
现在,当我运行makemigrations时,它将给出以下输出:
AUTH_USER_MODEL = 'users.PlatformAdmin'
我无法弄清楚自己在做什么以及如何解决此问题。
答案 0 :(得分:0)
我认为您必须添加3个这样的字段:
class AbstractUser(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(max_length=32, unique=True)
first_name = models.CharField(max_length=32, blank=True)
last_name = models.CharField(max_length=64, blank=True)
is_staff = models.BooleanField(default=False)
is_superuser = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
date_joined = models.DateTimeField(auto_now_add=True)
location = models.CharField(max_length=120, blank=True)
bio = models.TextField(blank=True)
# add this 3 fields
is_admin = models.BooleanField(default=False)
is_creater = models.BooleanField(default=False)
is_brand = models.BooleanField(default=True)
USERNAME_FIELD = 'email'
EMAIL_FIELD = 'email'
REQUIRED_FIELDS = []
objects = CustomUserManager()
class Meta:
abstract = True
def __str__(self):
return self.email
AUTH_USER_MODEL = 'users.CustomUserModel'
我认为您必须遵循这种方法。
答案 1 :(得分:0)
在类Meta中的AbstractUser内,abstract = True造成了问题。您还要在两个地方(AbstractUser和Creator)重复发送电子邮件字段。
或
仅保留一个用户模型(PlatformAdmin)。将创作者和品牌转换为正常模型。否则,PermissionsMixin类中的字段会发生冲突(同一字段在多个位置重复)。