繁体   English   中英

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

[英]Exception when migrating custom User in Django

我需要为我的应用程序创建一个自定义用户,并在我的settings.py使用AUTH_USER_MODEL = 'core.MyUser'完全遵循文档中的示例 但是,当我创建一个新数据库时,删除所有迁移文件夹并再次运行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 中创建自定义用户? 示例代码可以在这里查看https://github.com/bubuzzz/django-customer-swap-exception

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

Mehdi Pourfar 的回答是正确的。如果您想了解更多详情

通过运行 makemigrations,您告诉 Django 您已经对模型进行了一些更改(在本例中,您已经创建了新模型)并且您希望将这些更改存储为迁移。

迁移是 Django 存储模型更改(以及数据库架构)的方式——它们只是磁盘上的文件。 如果您愿意,可以阅读新模型的迁移; 这是文件 polls/migrations/0001_initial.py。 不用担心,您不会在每次 Django 制作时都阅读它们,但是它们被设计为可人工编辑的,以防您想手动调整 Django 改变事物的方式。

告诉 django 您想要迁移哪个应用程序都可以解决您的问题。它会自动创建一个文件夹调用迁移保留模型的记录。

python manage.py makemigrations core

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM