#django
#django
Вопрос:
Я пытаюсь переименовать свою пользовательскую модель CustomUser => User
Вот что я сделал:
- Переименовать класс Python и все ссылки
- makemigrations
Did you rename the accounts.CustomUser model to User? [y/N] y
Traceback (most recent call last):
File "manage.py", line 21, in <module>
main()
File "manage.py", line 17, in main
execute_from_command_line(sys.argv)
File "/venv/lib/python3.7/site-packages/django/core/management/__init__.py", line 401, in execute_from_command_line
utility.execute()
File "/venv/lib/python3.7/site-packages/django/core/management/__init__.py", line 395, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/venv/lib/python3.7/site-packages/django/core/management/base.py", line 330, in run_from_argv
self.execute(*args, **cmd_options)
File "/venv/lib/python3.7/site-packages/django/core/management/base.py", line 371, in execute
output = self.handle(*args, **options)
File "/venv/lib/python3.7/site-packages/django/core/management/base.py", line 85, in wrapped
res = handle_func(*args, **kwargs)
File "/venv/lib/python3.7/site-packages/django/core/management/commands/makemigrations.py", line 168, in handle
migration_name=self.migration_name,
File "/venv/lib/python3.7/site-packages/django/db/migrations/autodetector.py", line 43, in changes
changes = self._detect_changes(convert_apps, graph)
File "/venv/lib/python3.7/site-packages/django/db/migrations/autodetector.py", line 186, in _detect_changes
self.generate_altered_fields()
File "/venv/lib/python3.7/site-packages/django/db/migrations/autodetector.py", line 959, in generate_altered_fields
dependencies.extend(self._get_dependencies_for_foreign_key(new_field))
File "/venv/lib/python3.7/site-packages/django/db/migrations/autodetector.py", line 1086, in _get_dependencies_for_foreign_key
dep_app_label = field.remote_field.model._meta.app_label
AttributeError: 'SettingsReference' object has no attribute '_meta'
Итак, я застрял с этим исключением, любая помощь приветствуется 🙂
Ответ №1:
Просто столкнулся с этой проблемой, вот как я с ней справился:
Предполагая, что ваши пользовательские модели находятся в приложении под названием «пользователи»:
Оставьте AUTH_USER_MODEL
настройку на старом значении ( users.CustomUser
).
В users/model.py , переименовать класс из CustomUser
в Пользователь добавить новый класс со старым именем, которое наследуется от нового имени
class CustomUser(User):
pass
Используется manage.py
для создания пустого файла миграции
python manage.py makemigrations --empty users
Откройте недавно созданный файл миграции и добавьте эту операцию:
operations = [
migrations.RenameModel('CustomUser', 'User')
]
Перенесите изменения
python manage.py migrate users
Затем вы можете перейти и изменить AUTH_USER_MODEL
users.User
и удалить CustomUser
класс из users/model.py
Я ссылаюсь на пользовательскую модель, используемую settings.AUTH_USER_MODEL
при определении ForeignKey
и get_user_model()
из django.contrib.auth
любого другого места, поэтому у меня не было других ссылок, которые нужно было изменить.