【发布时间】: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