2012-06-26 32 views
4

当我发出命令:Django的`auth`和`contenttypes`中断执行syncdb

python manage.py syncdb --database=mydb

它显示输出如下...

Creating tables ... 
Creating table auth_permission 
Creating table auth_group_permissions 
Creating table auth_group 
Creating table auth_user_user_permissions 
Creating table auth_user_groups 
Creating table auth_user 
Creating table django_content_type 
Traceback (most recent call last): 
File "manage.py", line 14, in <module> 
    execute_manager(settings) 
File "/usr/lib/python2.7/site-packages/django/core/management/__init__.py", line 459,  in execute_manager 
    utility.execute() 
File "/usr/lib/python2.7/site-packages/django/core/management/__init__.py", line 382,  in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
File "/usr/lib/python2.7/site-packages/django/core/management/base.py", line 196, in  run_from_argv 
    self.execute(*args, **options.__dict__) 
File "/usr/lib/python2.7/site-packages/django/core/management/base.py", line 232, in  execute 
    output = self.handle(*args, **options) 
File "/usr/lib/python2.7/site-packages/django/core/management/base.py", line 371, in  handle 
    return self.handle_noargs(**options) 
File "/usr/lib/python2.7/site-packages/django/core/management/commands/syncdb.py",  line 110, in handle_noargs 
    emit_post_sync_signal(created_models, verbosity, interactive, db) 
File "/usr/lib/python2.7/site-packages/django/core/management/sql.py", line 189, in  emit_post_sync_signal 
    interactive=interactive, db=db) 
File "/usr/lib/python2.7/site-packages/django/dispatch/dispatcher.py", line 172, in  send 
    response = receiver(signal=self, sender=sender, **named) 
File "/usr/lib/python2.7/site-packages/django/contrib/auth/management/__init__.py",  line 35, in create_permissions 
    ctype = ContentType.objects.get_for_model(klass) 
File "/usr/lib/python2.7/site-packages/django/contrib/contenttypes/models.py", line  42, in get_for_model 
    defaults = {'name': smart_unicode(opts.verbose_name_raw)}, 
File "/usr/lib/python2.7/site-packages/django/db/models/manager.py", line 134, in  get_or_create 
    return self.get_query_set().get_or_create(**kwargs) 
File "/usr/lib/python2.7/site-packages/django/db/models/query.py", line 442, in  get_or_create 
    return self.get(**lookup), False 
File "/usr/lib/python2.7/site-packages/django/db/models/query.py", line 361, in get 
    num = len(clone) 
File "/usr/lib/python2.7/site-packages/django/db/models/query.py", line 85, in  __len__ 
    self._result_cache = list(self.iterator()) 
File "/usr/lib/python2.7/site-packages/django/db/models/query.py", line 291, in  iterator 
    for row in compiler.results_iter(): 
File "/usr/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 763,  in results_iter 
    for rows in self.execute_sql(MULTI): 
File "/usr/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line  818, in  execute_sql 
    cursor.execute(sql, params) 
File "/usr/lib/python2.7/site-packages/django/db/backends/util.py", line 40, in  execute 
    return self.cursor.execute(sql, params) 
File "/usr/lib/python2.7/site-packages/django/db/backends/sqlite3/base.py", line  337, in  execute 
    return Database.Cursor.execute(self, query, params) 
django.db.utils.DatabaseError: no such table: django_content_type 

我有一个自定义数据库路由器基本上设置为django的示例,除了我在MY模型上有一个自定义属性,以便它知道它默认使用哪个数据库。 syncdb作品在我settings.py INSTALLED_APPS时我注释掉:django.contrib.authdjango.contrib.contenttypes。有这个问题一段时间,但一直推迟到现在,当我需要开始认证。如果你想要我的分贝路由器我会后也

回答

3

我已经解释了类似的问题在这里: django.db.utils.IntegrityError: (1062, "Duplicate entry '22-add_' for key 'content_type_id'")

你并不需要注释掉contrib.auth和contrib.contenttypes。只要确保所有的django模型 - 用户,会话,权限仅在1个数据库中使用,这可以被视为主数据库。

这不会直接解决您的问题,但可以成为处理多个db和db路由器的起点。你需要知道的是每个模型在数据库中都有它的内容类型。 当Django对象 - 用户/会话/权限不限于单个数据库时发生问题 - 然后将它们创建到每个数据库中。而且由于内容类型使模型具有唯一性,因此在多个数据库中为单一类型设置内容类型可能会导致在上述其他SO问题中解释的问题。

0

在Django的1.4,你必须在项目的顶层文件夹启动该命令(path_to_project/you_project不path_to_project/you_project/you_project)

+0

,因为它是基于只有一个地方,你甚至可以从执行syncdb, 'manage.py'文件的位置 –

+0

实际上,即使在内部文件夹中也可以运行syncdb。这可能是错误的,但你可以。如果你使用slqlite,它会创建新的数据库;我不知道这是否是django 1.4的bug,但是在我的项目中它没有任何抱怨。 – Griffosx