В Django, как переименовать пользовательскую модель?

#django

#django

Вопрос:

Я пытаюсь переименовать свою пользовательскую модель CustomUser => User

Вот что я сделал:

  1. Переименовать класс Python и все ссылки
  2. 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 любого другого места, поэтому у меня не было других ссылок, которые нужно было изменить.