django.db.utils.IntegrityError:(1062,“重复条目'22 -add_'表示密钥'content_type_id'”)

时间:2012-06-26 12:27:58

标签: django-database django-orm

我正在使用django多个数据库路由器概念,有多个站点具有不同的数据库。基础数据库用户将登录所有其他子站点。

当我在基站中尝试 syncdb 时,其工作正常(在任何时候),但尝试 syncdb 与其他网站仅在第一次工作,如果我们下次尝试-wards它会抛出如下所示的整数错误

  • django.db.utils.IntegrityError:(1062,“重复条目 '22 -add_somesame'用于键'content_type_id'“)

一旦我删除了该项目中的多个数据库路由器设置,意味着syncdb可以正常工作(在任何时候)。

那么这涉及到多个db路由器吗?或者还有什么?

请有人就此提出建议,谢谢。

1 个答案:

答案 0 :(得分:1)

这里的问题是db router和django系统对象。多个数据库和路由器遇到了同样的问题。我记得这里的问题是auth.permission内容类型,它们在数据库之间混合。 syncdb脚本否则会尝试在所有数据库中创建这些,并且它会为某个对象创建权限内容类型,该id已经为本地模型保留。

我有以下

BASE_DB_TYPES = (
 'auth.user',
 'auth.group',
 'auth.permission',
 'sessions.session',

然后在db router中:

def db_for_read(self, model, **hints):
    if hasattr(model, '_meta') and str(model._meta) in BASE_DB_TYPES:
        return 'base_db' # the alias of base db that will store users
    return None # the default database, or some custom mapping

修改

此外,例外情况可能表示您为模型“add_somesame”声明了权限“somesame”,而Django会自动创建add_delete_,所有对象的edit_权限。