FieldError: Невозможно преобразовать ключевое слово 'username' в поле
Используется Django 4.2.5, Django-cms 4.1.2, python3.11
Я пытался ввести содержимое для поля static_alias, когда получил эту ошибку:
Internal Server Error: /en/admin/djangocms_alias/alias/1/change/
django.core.exceptions.FieldError: Unsupported lookup 'username' for
BigAutoField or join on the field not permitted.
django.core.exceptions.FieldError: Cannot resolve keyword 'username' into field.
Choices are: created_usergroups, created_users, djangocms_usersettings, email,
filer_clipboards, filer_folder_permissions, filer_owned_folders, first_name,
globalpagepermission, groups, id, is_admin, is_staff, is_superuser, last_login,
last_name, locking_users, logentry, owned_files, pagepermission, pageuser,
password, statetracking, student, teacher, user_permissions, version
Я использую абстрактную модель пользователя: Models.py
class UserProfile(PermissionsMixin, AbstractBaseUser):
email = models.EmailField(_('Email Address'), unique=True)
password = models.CharField(_('Password'), max_length=255)
is_admin = models.BooleanField(default=False, verbose_name='Is Admin')
is_staff = models.BooleanField(default=False, verbose_name='Is Staff')
first_name = models.CharField(
default='', max_length=255, verbose_name='First Name')
last_name = models.CharField(
default='', max_length=255, verbose_name='Last Name')
is_superuser = models.BooleanField(
default=False, verbose_name='superuser')
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['first_name', 'last_name']
objects = UserProfileManager()
class Meta:
verbose_name = _('User Profile')
def __str__(self):
return self.email
Managers.py class UserProfileManager(BaseUserManager): """ Пользовательский менеджер пользовательских моделей, где электронная почта является уникальным идентификатором для аутентификации вместо имен пользователей. """
def _create_user(self, email, password, **extra_fields):
"""
Create and save a user with the given email, and password.
"""
if not email:
raise ValueError('The given email must be set')
email = self.normalize_email(email)
user = self.model(email=email, **extra_fields)
user.set_password(password)
user.save(using=self._db)
return user
forms.py
class UserProfileForm(UserCreationForm):
email = forms.EmailField(max_length=255, required=True, widget=forms.TextInput(attrs={
'type': 'email', 'class': 'form-control', 'name': 'user-email', 'placeholder': 'Email', 'data-validetta': 'required,email'}))
password1 = forms.CharField(max_length=255, required=True, widget=forms.TextInput(
attrs={'type': 'password', 'class': 'form-control', 'name': 'user-password1', 'placeholder': 'Password', 'data-validetta': 'required,minLength[4],maxLength[20]'}))
password2 = forms.CharField(max_length=255, required=True, widget=forms.TextInput(
attrs={'type': 'password', 'class': 'form-control', 'name': 'user-password2', 'placeholder': 'Confirm Password', 'data-validetta': 'required,minLength[4],maxLength[20],equalTo[password1]'}))
first_name = forms.CharField(max_length=255, required=True, widget=forms.TextInput(
attrs={'type': 'text', 'name': 'user-first_name', 'placeholder': 'First Name', 'data-validetta': 'required'}))
last_name = forms.CharField(max_length=255, required=True, widget=forms.TextInput(
attrs={'type': 'text', 'name': 'user-last_name', 'placeholder': 'Last Name', 'data-validetta': 'required'}))
class Meta:
model = UserProfile
fields = ('email', 'password1', 'password2', 'first_name', 'last_name')
Это было решено добавлением следующей строки в settings.py, поскольку я использую пользовательскую модель пользователя только с электронной почтой, без имени пользователя:
DJANGOCMS_VERSIONING_USERNAME_FIELD = 'email'
Чтобы отследить проблему, я зашел в следующие файлы:
site-packages\djangocms_versioning\admin.py
and
site-packages\djangocms_versioning\conf.py
и вам остается только использовать обратную трассировку, чтобы найти строку, которая вызвала проблему.