Как изменить поле username на user_name в пользовательской модели пользователя django?
Я создал пользовательскую модель пользователя. теперь я хочу использовать 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'
Причина использования этого заключается в том, что все таблицы базы данных проекта имеют такую конфигурацию. Было бы лучше, если бы я мог определить имя поля в базе данных так же, как мы делаем это для таблиц в классе Meta, как показано ниже. где я вызываю мою пользовательскую модель пользователя как модель пользователя в базе данных.
class Meta:
db_table = "user"
есть ли возможность вызвать поле таблицы таким образом?
class Meta:
db_table_user_name = "username"
если это возможно, то нам не нужно менять username
на user_name
. мы можем напрямую вызвать поле username равное user_name в базе данных. если и только если это возможно с моделями django.
в файле admin.py, где вы регистрируете модель User. вы регистрируете ее в ModelAdmin и в этом ModelAdmion вы неправильно назвали поле. измените его на user_name и их.