【问题标题】:Django custom User shoots an import issue at runtime when syncing dbDjango 自定义用户在同步 db 时在运行时遇到导入问题
【发布时间】:2013-11-27 14:21:11
【问题描述】:

我在app.models 中定义了一个自定义User 模型。它也在AUTH_USER_MODEL 设置中正确定义为app.User。当我运行该网站时,一切正常。

但是,当我运行 ./manage.py syncdb --migrate 时,它会因以下回溯而中断:

Traceback (most recent call last):
  File ".virtualenv/lib/python2.7/site-packages/django/core/management/base.py", line 222, in run_from_argv
    self.execute(*args, **options.__dict__)
  File ".virtualenv/lib/python2.7/site-packages/django/core/management/base.py", line 255, in execute
    output = self.handle(*args, **options)
  File ".virtualenv/lib/python2.7/site-packages/django/core/management/base.py", line 386, in handle
    return self.handle_noargs(**options)
  File ".virtualenv/lib/python2.7/site-packages/south/management/commands/syncdb.py", line 103, in handle_noargs
    management.call_command('migrate', **options)
  File ".virtualenv/lib/python2.7/site-packages/django/core/management/__init__.py", line 161, in call_command
    return klass.execute(*args, **defaults)
  File ".virtualenv/lib/python2.7/site-packages/raven/contrib/django/management/__init__.py", line 37, in new_execute
    return original_func(self, *args, **kwargs)
  File ".virtualenv/lib/python2.7/site-packages/django/core/management/base.py", line 255, in execute
    output = self.handle(*args, **options)
  File ".virtualenv/lib/python2.7/site-packages/south/management/commands/migrate.py", line 111, in handle
    ignore_ghosts = ignore_ghosts,
  File ".virtualenv/lib/python2.7/site-packages/south/migration/__init__.py", line 233, in migrate_app
    migrator.load_initial_data(target, db=database)
  File ".virtualenv/lib/python2.7/site-packages/south/migration/migrators.py", line 224, in load_initial_data
    call_command('loaddata', 'initial_data', verbosity=self.verbosity, database=db)
  File ".virtualenv/lib/python2.7/site-packages/django/core/management/__init__.py", line 161, in call_command
    return klass.execute(*args, **defaults)
  File ".virtualenv/lib/python2.7/site-packages/raven/contrib/django/management/__init__.py", line 37, in new_execute
    return original_func(self, *args, **kwargs)
  File ".virtualenv/lib/python2.7/site-packages/django/core/management/base.py", line 254, in execute
    self.validate()
  File ".virtualenv/lib/python2.7/site-packages/django/core/management/base.py", line 285, in validate
    raise CommandError("One or more models did not validate:\n%s" % error_text)
CommandError: One or more models did not validate:
auth.user: Model has been swapped out for 'app.User' which has not been installed or is abstract.

当我运行 ./manage.py syncdb --migrate app 时,一切运行正常,所以我不明白这里发生了什么。有人知道吗?

编辑:我安装的应用程序的顺序:

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.admin',
    'django.contrib.webdesign',
    'django.contrib.staticfiles',
    'djcelery',
    'app',

    'babeldjango',
    'debug_toolbar',
    'template_timings_panel',
    'devserver',
    'django_extensions',
    'djrill',
    'facebook_tag',
    'gunicorn',
    'haystack',
    'markitup',
    'modeltranslation',
    'raven.contrib.django',
    'reversion',
    'rosetta',
    'sorl.thumbnail',
    'south',
    'statictastic',
    'storages',
    'twitter_tag',
    'zebra',
    'djcelery',
    'djmoney_rates'
)

编辑 2:问题似乎是由第三方应用程序中运行的迁移引起的。如果我注释掉那些有迁移的应用程序,一切都会顺利进行。我想这也是意料之中的,因为./manage.py migrate app 工作正常,但./manage.py migrate(它为所有应用程序运行迁移)不能。根据这些信息和跟踪,我的 app 的模型似乎在运行第三方应用程序的迁移时根本不可用。

【问题讨论】:

  • INSTALLED_APPS 中有app 吗?
  • @twil,是的。我刚刚添加了我的INSTALLED_APPS
  • 在列表中上移应用程序。 Django 关心模型排序的度量标准。 (至少在他们各自的文件中)
  • 我已尝试将其移至列表顶部(在django.contrib.auth 下方),但仍然得到相同的结果。
  • @tzenderman,您最后的编辑是查看github.com/django/django/blob/master/django/db/models/… BaseAppCache.get_model() 到底发生了什么,但目前尚不清楚为什么会发生。你使用虚拟环境吗?可以尝试一一注释掉 3d 派对应用并运行 migrate

标签: python django django-models django-authentication django-syncdb


【解决方案1】:

遇到同样的问题,从 South 0.8.3 迁移到 South 0.8.4 解决了它

在这里看到了解决方案:http://south.aeracode.org/ticket/1179

【讨论】:

  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
  • @KristerAndersson,这不仅仅是一个链接的答案。这并不是说它的质量不低(我对手头的主题不够熟悉来判断这一点,但如果你是并且它是,请否决它)。尽管答案缺乏细节,但它确实不仅仅是一个链接:它让我们知道我们应该从一个版本的软件转移到另一个版本。这并不多,但它是对答案的有效尝试。当答案不是答案时,请查看您的答案在另一个城堡中:meta.stackexchange.com/questions/225370/…
猜你喜欢
  • 2021-04-20
  • 2020-07-31
  • 2019-02-13
  • 1970-01-01
  • 2019-07-17
  • 2012-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多