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

и вам остается только использовать обратную трассировку, чтобы найти строку, которая вызвала проблему.

Вернуться на верх