在Django中,如何重命名用户模型?

4

我试图将我的用户模型 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个回答

0

刚遇到这个问题,这是我处理的方法:

假设您的用户模型在名为“users”的应用程序中:

AUTH_USER_MODEL设置保留为旧值(users.CustomUser)。

在users/model.py中,将类从CustomUser重命名为User,并添加一个新类,该类继承自旧名称。

class CustomUser(User):
    pass

使用 manage.py 创建一个空迁移文件。
python manage.py makemigrations --empty users

打开新创建的迁移文件,并添加以下操作:
operations = [
    migrations.RenameModel('CustomUser', 'User')
]

迁移更改

python manage.py migrate users

然后您可以更改AUTH_USER_MODELusers.User并从users/model.py中删除CustomUser类。

在定义ForeignKey时,我使用settings.AUTH_USER_MODEL引用用户模型,而在其他任何地方,我使用django.contrib.authget_user_model(),因此我没有其他需要更改的引用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接