如何通过创建自定义模型覆盖 Django 中用户名的最大长度
How to override max length of username in Django by creating a custom model
我有问题。我正在使用 Django 1.7,并且已经制作了一个自定义用户模型,它继承了 Django 的抽象用户,如下所示:
class CustomUser(AbstractUser, BaseModel):
现在他们在这里 Django-ticket 说,我可以通过创建自定义用户来避免用户名 max_length 为 30 的问题。好吧,我已经有一个自定义用户,所以应该很容易吧?我是如何尝试这样做的:
class CustomUser(AbstractUser, BaseModel):
username = models.CharField(max_length=70, unique=True, db_index=True)
现在,当我尝试为更改此字段进行迁移时,会导致错误:django.core.exceptions.FieldError: Local field 'username' in class 'CustomUser' clashes with field of similar name from base class 'AbstractUser'
我做错了什么?我该如何解决这个问题?我有需要迁移的数据,所以我不能清空数据库。
如果您希望它更灵活地继承自 AbstractBaseUser
,您将能够以这种方式指定您自己的用户名字段,例如
class User(AbstractBaseUser):
email = models.EmailField(
verbose_name='email address',
max_length=255,
unique=True,
)
is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False)
date_joined = models.DateTimeField(
verbose_name=_('date created'),
auto_created=True,
default=timezone.now
)
objects = UserManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
https://docs.djangoproject.com/en/1.7/topics/auth/customizing/#specifying-a-custom-user-model
不要尝试覆盖 username
字段。刚刚
class CustomUser(AbstractUser, BaseModel):
#here goes other fields
CustomUser._meta.get_field('username').max_length = 70
但我强烈建议改用 inherit from AbstractBaseUser
。
据我了解,您不能覆盖任何 Django ORM 模型的属性,也不能来自 AbstractUser
,也不能来自 PermissionsMixin
classes。所以,如果你有自己的权限、组(角色)方法,即使你想要另一个属性名称而不是 user_permissions
或 groups
,那么你应该从 AbstractBaseUser
继承,做很多事情从 AbstractUser
复制粘贴并从 django.db.models.Model
class 继承你的 Permission
和 Group
模型作为 @levi 和@Hedde van der Heide 建议。
我有问题。我正在使用 Django 1.7,并且已经制作了一个自定义用户模型,它继承了 Django 的抽象用户,如下所示:
class CustomUser(AbstractUser, BaseModel):
现在他们在这里 Django-ticket 说,我可以通过创建自定义用户来避免用户名 max_length 为 30 的问题。好吧,我已经有一个自定义用户,所以应该很容易吧?我是如何尝试这样做的:
class CustomUser(AbstractUser, BaseModel):
username = models.CharField(max_length=70, unique=True, db_index=True)
现在,当我尝试为更改此字段进行迁移时,会导致错误:django.core.exceptions.FieldError: Local field 'username' in class 'CustomUser' clashes with field of similar name from base class 'AbstractUser'
我做错了什么?我该如何解决这个问题?我有需要迁移的数据,所以我不能清空数据库。
如果您希望它更灵活地继承自 AbstractBaseUser
,您将能够以这种方式指定您自己的用户名字段,例如
class User(AbstractBaseUser):
email = models.EmailField(
verbose_name='email address',
max_length=255,
unique=True,
)
is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False)
date_joined = models.DateTimeField(
verbose_name=_('date created'),
auto_created=True,
default=timezone.now
)
objects = UserManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
https://docs.djangoproject.com/en/1.7/topics/auth/customizing/#specifying-a-custom-user-model
不要尝试覆盖 username
字段。刚刚
class CustomUser(AbstractUser, BaseModel):
#here goes other fields
CustomUser._meta.get_field('username').max_length = 70
但我强烈建议改用 inherit from AbstractBaseUser
。
据我了解,您不能覆盖任何 Django ORM 模型的属性,也不能来自 AbstractUser
,也不能来自 PermissionsMixin
classes。所以,如果你有自己的权限、组(角色)方法,即使你想要另一个属性名称而不是 user_permissions
或 groups
,那么你应该从 AbstractBaseUser
继承,做很多事情从 AbstractUser
复制粘贴并从 django.db.models.Model
class 继承你的 Permission
和 Group
模型作为 @levi 和@Hedde van der Heide 建议。