Я новичок в Django, и у меня возникла странная проблема. Используя Django 2.2.5, я создал пользовательский класс User, подклассифицированный из AbstractBaseUser
. Помимо расширения AbstractBaseUser
, единственным существенным изменением, которое я сделал, было удаление поля username
и добавление моего собственного (не буду вдаваться в причину здесь). Я также добавил USERNAME_FIELD = "my new username"
к модели.
Похоже, все это работало хорошо, и я смог создать пользователей. Затем я установил django-registration
, чтобы использовать эту функциональность, и когда я попытался makemigrations
, я столкнулся с этой ошибкой:
'django .core.exceptions.FieldError: Неизвестные поля («Мое новое имя пользователя») указано для User`
Теперь это не имеет никакого смысла для меня, поскольку модель явно имеет поле «Мое новое имя пользователя», и я указал Django следует использовать мою модель пользователя при настройке через AUTH_USER_MODEL
. Я знал, что это работает, потому что вызов get_user_model()
в оболочке вернул мою пользовательскую модель.
Теперь вот где это странно, я смог проследить проблему до django-registrations
, RegistrationForm
. Это форма, которая подклассов Django 'UserCreationForm
. Когда RgistrationForm загружался или что-то в течение makemigrations
, он выдавал ошибку, потому что ссылка на модель для формы была django.User
, а не моя пользовательская модель пользователя. RegistrationForm
не объявляет модель и использует UserCreationForm
модель, которая оказывается User
из django.contrib.auth.models
.
Исходя из того, что я прочитал и как написано User
, он должен ссылаться на мою модель через атрибут swappable
, поскольку я установил AUTH_USER_MODEL
, и он должен swap к модели, расположенной в этой опции настроек. По какой-то причине, хотя это не работает, и я не знаю достаточно о Django для дальнейшей отладки.
Я очень смущен этим, поскольку get_user_model()
ссылается на точно такой же параметр, и он работает.
На данный момент мне удалось это исправить, отредактировав модель RegistrationForm
, добавив model = "Custom user model
в django формы регистрации. Я бы предпочел не распространять пользовательскую версию этого пакета вместе с остальной частью сайта.
Есть идеи, что происходит с swappable
, что может быть причиной этой проблемы?
Редактировать 27.01.19: Обновление Я попытался разбить на подклассы соответствующие django-registration
классы, но оказалось, что простой импорт RegistrationForm
вызывает проблему. Импорт UserCreationForm
не сразу вызывает проблему, но если я пытаюсь проверить UserCreationForm.Meta.model."My new username"
, он выдает следующую ошибку:
AttributeError: тип объекта «Пользователь» не имеет атрибута «UVI_Handle»
Это согласуется с ошибкой выше. На данный момент я не уверен, что делать дальше. Я мог бы подкласс UserCreationForm
, но ни один из django-registration
не поймет это, так что, похоже, нет смысла его использовать, так как мне придется копировать все это.