如何在 Django 自定义用户模型中将用户名字段更改为 user_name?
How to change the field of username to user_name in to django custom user model?
我已经创建了自定义用户模型。现在我想使用 user_name
作为用户名字段而不是 username
。如下面的代码片段所示。
class CustomUser(AbstractBaseUser):
username_validator = UnicodeUsernameValidator()
user_name = models.CharField(
_('username'),
max_length=100,
unique=True,
help_text=_('Required. 100 characters or fewer. Letters, digits and @/./+/-/_ only.'),
validators=[username_validator],
error_messages={
'unique': _("A user with that username already exists."),
},
)
USERNAME_FIELD = 'user_name'
我做不到。我遇到以下错误:
SystemCheckError: System check identified some issues:
ERRORS:
<class 'accounts.admin.CustomUserAdmin'>: (admin.E033) The value of 'ordering[0]' refers to 'username', which is not an attribute of 'accounts.CustomUser'.
<class 'accounts.admin.CustomUserAdmin'>: (admin.E108) The value of 'list_display[0]' refers to 'username', which is not a callable, an attribute of 'CustomUserAdmin', or an attribute or method on 'accounts.CustomUser'
之所以使用这个,是因为所有项目的数据库table的约定都是这样的。如果我可以定义字段名称是数据库,就像我们在 Meta class 中为 tables 所做的那样,那就更好了,如下所示。我将我的自定义用户模型称为数据库中的用户模型。
class Meta:
db_table = "user"
是否可以像这样调用 table 字段?
class Meta:
db_table_user_name = "username"
如果可能的话,我们不需要将 username
更改为 user_name
。我们可以直接调用数据库中的用户名字段等于user_name。当且仅当 Django 模型可行时。
在 admin.py 中您注册用户模型的位置。您正在使用 ModelAdmin 注册它,并且在该 ModelAdmion 中您错误地命名了字段。将其更改为 user_name 他们也是。
在您的情况下,您不需要更改字段名称,只需使用 db_column='user_name'
参数和参数覆盖 username
字段即可:
class CustomUser(AbstractBaseUser):
username_validator = UnicodeUsernameValidator()
username = models.CharField(
_('username'),
max_length=150,
unique=True,
help_text=_('Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.'),
db_column='user_name' # <------------------------
validators=[username_validator],
error_messages={
'unique': _("A user with that username already exists."),
},
)
我已经创建了自定义用户模型。现在我想使用 user_name
作为用户名字段而不是 username
。如下面的代码片段所示。
class CustomUser(AbstractBaseUser):
username_validator = UnicodeUsernameValidator()
user_name = models.CharField(
_('username'),
max_length=100,
unique=True,
help_text=_('Required. 100 characters or fewer. Letters, digits and @/./+/-/_ only.'),
validators=[username_validator],
error_messages={
'unique': _("A user with that username already exists."),
},
)
USERNAME_FIELD = 'user_name'
我做不到。我遇到以下错误:
SystemCheckError: System check identified some issues:
ERRORS:
<class 'accounts.admin.CustomUserAdmin'>: (admin.E033) The value of 'ordering[0]' refers to 'username', which is not an attribute of 'accounts.CustomUser'.
<class 'accounts.admin.CustomUserAdmin'>: (admin.E108) The value of 'list_display[0]' refers to 'username', which is not a callable, an attribute of 'CustomUserAdmin', or an attribute or method on 'accounts.CustomUser'
之所以使用这个,是因为所有项目的数据库table的约定都是这样的。如果我可以定义字段名称是数据库,就像我们在 Meta class 中为 tables 所做的那样,那就更好了,如下所示。我将我的自定义用户模型称为数据库中的用户模型。
class Meta:
db_table = "user"
是否可以像这样调用 table 字段?
class Meta:
db_table_user_name = "username"
如果可能的话,我们不需要将 username
更改为 user_name
。我们可以直接调用数据库中的用户名字段等于user_name。当且仅当 Django 模型可行时。
在 admin.py 中您注册用户模型的位置。您正在使用 ModelAdmin 注册它,并且在该 ModelAdmion 中您错误地命名了字段。将其更改为 user_name 他们也是。
在您的情况下,您不需要更改字段名称,只需使用 db_column='user_name'
参数和参数覆盖 username
字段即可:
class CustomUser(AbstractBaseUser):
username_validator = UnicodeUsernameValidator()
username = models.CharField(
_('username'),
max_length=150,
unique=True,
help_text=_('Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.'),
db_column='user_name' # <------------------------
validators=[username_validator],
error_messages={
'unique': _("A user with that username already exists."),
},
)