Python Django`auth`和`contenttypes`中断syncdb

Python Django`auth`和`contenttypes`中断syncdb,python,django,django-models,python-2.7,Python,Django,Django Models,Python 2.7,当我发出命令时: 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 Creat

当我发出命令时:

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
正在创建表。。。
创建表auth\u权限
正在创建表身份验证组权限
创建表auth_组
创建表auth\u user\u user\u权限
创建表身份验证用户组
创建表auth\u user
创建表django_内容_类型
回溯(最近一次呼叫最后一次):
文件“manage.py”,第14行,在
执行\u管理器(设置)
文件“/usr/lib/python2.7/site packages/django/core/management/__init__.py”,第459行,在execute_manager中
utility.execute()
文件“/usr/lib/python2.7/site packages/django/core/management/__init__.py”,执行中第382行
self.fetch_命令(子命令)。从_argv(self.argv)运行_
文件“/usr/lib/python2.7/site-packages/django/core/management/base.py”,第196行,运行于_argv
self.execute(*args,**选项._dict__;
文件“/usr/lib/python2.7/site packages/django/core/management/base.py”,执行中的第232行
输出=self.handle(*args,**选项)
文件“/usr/lib/python2.7/site packages/django/core/management/base.py”,第371行,在handle中
返回self.handle\u noargs(**选项)
handle_noargs中的文件“/usr/lib/python2.7/site packages/django/core/management/commands/syncdb.py”,第110行
发出后同步信号(创建的模型、冗余、交互、db)
文件“/usr/lib/python2.7/site packages/django/core/management/sql.py”,第189行,在emit\u post\u sync\u信号中
交互式=交互式,db=db)
文件“/usr/lib/python2.7/site packages/django/dispatch/dispatcher.py”,第172行,在send中
响应=接收方(信号=自身,发送方=发送方,**已命名)
文件“/usr/lib/python2.7/site packages/django/contrib/auth/management/_init__.py”,创建权限中的第35行
ctype=ContentType.objects.get\u for\u模型(klass)
文件“/usr/lib/python2.7/site packages/django/contrib/contenttypes/models.py”,第42行,在get_for_model中
默认值={'name':smart\u unicode(opts.verbose\u name\u raw)},
文件“/usr/lib/python2.7/site packages/django/db/models/manager.py”,第134行,在get_或_create中
返回self.get\u query\u set()
文件“/usr/lib/python2.7/site packages/django/db/models/query.py”,第442行,在get_或_create中
返回self.get(**查找),False
文件“/usr/lib/python2.7/site packages/django/db/models/query.py”,get中第361行
num=len(克隆)
文件“/usr/lib/python2.7/site packages/django/db/models/query.py”,第85行,在__
self.\u result\u cache=list(self.iterator())
迭代器中的文件“/usr/lib/python2.7/site packages/django/db/models/query.py”,第291行
对于编译器.results\u iter()中的行:
文件“/usr/lib/python2.7/site packages/django/db/models/sql/compiler.py”,第763行,在results\u iter中
对于self.execute_sql(多)中的行:
文件“/usr/lib/python2.7/site packages/django/db/models/sql/compiler.py”,第818行,在execute_sql中
cursor.execute(sql,params)
文件“/usr/lib/python2.7/site packages/django/db/backends/util.py”,执行中的第40行
返回self.cursor.execute(sql,params)
文件“/usr/lib/python2.7/site packages/django/db/backends/sqlite3/base.py”,执行中的第337行
返回Database.Cursor.execute(self、query、params)
django.db.utils.DatabaseError:没有这样的表:django\u content\u type

我有一个自定义db路由器,它基本上被设置为django的示例,除了我的模型上有一个自定义属性,以便它知道默认的数据库
syncdb
在my
settings.py安装的应用程序中运行时
我注释掉:
django.contrib.auth
django.contrib.contenttypes
。这个问题已经出现了一段时间,但一直推迟到现在,那时我需要开始验证。如果你想要我的db路由器,我也会发布

我在这里解释了一个类似的问题:

您不需要注释掉contrib.auth和contrib.contenttypes。只需确保所有django模型(用户、会话和权限)仅在1个数据库中使用,可以将其视为主数据库

这不会直接解决您的问题,但可以作为处理多个db和db路由器的起点。您需要知道的是,每个模型在数据库中都有自己的内容类型。
当django对象(user/session/permission)不限于单个数据库时,就会出现问题,然后将它们创建到每个数据库中。而且,由于内容类型使模型具有唯一性,因此在多个数据库中为单个类型提供内容类型可能会导致上述其他SO问题中解释的问题。

在Django 1.4中,您必须在项目的顶级文件夹中启动此命令(路径\到\项目/您\项目而不是路径\到\项目/您\项目)

只有一个地方可以调用syncdb,因为它基于
manage.py
文件的位置实际上,您甚至可以在内部文件夹中运行syncdb。这可能是错误的,但你可以。如果您使用slqlite,它将创建新的数据库;我不知道这是否是django 1.4的bug,但在我的项目中,它运行时没有任何抱怨。