在Django中迁移自定义用户时出现异常



我需要为我的应用程序创建一个自定义用户,并完全按照文档中的AUTH_USER_MODEL = 'core.MyUser'在我的settings.py中的示例。然而,当我创建一个新数据库,删除所有迁移文件夹并再次运行python manage.py migrate时,它给了我这样的异常

  File "manage.py", line 22, in <module>
    execute_from_command_line(sys.argv)
  File "/Users/bubuzzz/Projects/python/apps/lib/python2.7/site-packages/django/core/management/__init__.py", line 367, in execute_from_command_line
    utility.execute()
  File "/Users/bubuzzz/Projects/python/apps/lib/python2.7/site-packages/django/core/management/__init__.py", line 359, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/Users/bubuzzz/Projects/python/apps/lib/python2.7/site-packages/django/core/management/base.py", line 294, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/Users/bubuzzz/Projects/python/apps/lib/python2.7/site-packages/django/core/management/base.py", line 345, in execute
    output = self.handle(*args, **options)
  File "/Users/bubuzzz/Projects/python/apps/lib/python2.7/site-packages/django/core/management/commands/makemigrations.py", line 173, in handle
    migration_name=self.migration_name,
  File "/Users/bubuzzz/Projects/python/apps/lib/python2.7/site-packages/django/db/migrations/autodetector.py", line 47, in changes
    changes = self._detect_changes(convert_apps, graph)
  File "/Users/bubuzzz/Projects/python/apps/lib/python2.7/site-packages/django/db/migrations/autodetector.py", line 132, in _detect_changes
    self.old_apps = self.from_state.concrete_apps
  File "/Users/bubuzzz/Projects/python/apps/lib/python2.7/site-packages/django/db/migrations/state.py", line 180, in concrete_apps
    self.apps = StateApps(self.real_apps, self.models, ignore_swappable=True)
  File "/Users/bubuzzz/Projects/python/apps/lib/python2.7/site-packages/django/db/migrations/state.py", line 242, in __init__
    self.render_multiple(list(models.values()) + self.real_models)
  File "/Users/bubuzzz/Projects/python/apps/lib/python2.7/site-packages/django/db/migrations/state.py", line 277, in render_multiple
    model.render(self)
  File "/Users/bubuzzz/Projects/python/apps/lib/python2.7/site-packages/django/db/migrations/state.py", line 559, in render
    body,
  File "/Users/bubuzzz/Projects/python/apps/lib/python2.7/site-packages/django/db/models/base.py", line 153, in __new__
    raise TypeError("%s cannot proxy the swapped model '%s'." % (name, base_meta.swapped))
TypeError: Customer cannot proxy the swapped model 'core.MyUser'.

我不知道为什么那里有customer的迁移脚本,因为在我的应用程序中,我曾经也有Customer模型,虽然我已经删除了它。

然后,我创建了一个新的django项目来测试并尝试运行迁移。令人惊讶的是,我还看到了那些客户迁移步骤,但是它成功地运行了。
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_customer... OK
  Applying auth.0010_delete_customer... OK
  Applying sessions.0001_initial... OK

简而言之,我如何在Django 1.10中创建自定义User ?示例代码可以在这里查看https://github.com/bubuzzz/django-customer-swap-exception

您不应该删除您的迁移文件夹。如果你这样做,django不会为你做迁移。在核心应用程序中创建迁移文件夹,在其中创建一个空的__init__.py文件,删除db。./manage.py makemigration,然后迁移应该可以正常工作。

Mehdi Pourfar的答案是正确的。如果你想知道更多的细节

通过运行makemigations,你告诉Django你已经对你的模型做了一些改变(在这个例子中,你已经做了一些新的),并且你想把这些改变作为迁移存储。

迁移是Django将更改存储到你的模型(也就是你的数据库模式)的方式——它们只是磁盘上的文件。如果愿意,您可以阅读新模型的迁移;它是文件polls/migrations/0001_initial.py。别担心,你不需要每次Django创建一个文件都去读它们,但是它们是人为可编辑的,以防你想手动调整Django的更改方式。

告诉django你想迁移哪个应用来解决你的问题。它将自动创建一个文件夹,调用迁移,保存模型的记录。

python manage.py makemigrations core

最新更新