Skip to main content
 首页 » 编程设计

python之运行 Django 的 ./manage.py syncdb 时禁用更新 content_types

2025年05月04日32虾米姐

我的项目正在使用多个数据库来管理身份验证、内容类型信息和项目应用程序。

我的数据库设置:

DATABASES = { 
    'default': { 
        'ENGINE': 'django.db.backends.mysql',  
        'NAME': 'test_default', 
        'USER': 'root', 
        'PASSWORD': 'root', 
        'PORT': '', 
    }, 
    'auth_db': { 
        'ENGINE': 'django.db.backends.mysql', 
        'NAME': 'test_auth_db', 
        'USER': 'root', 
        'PASSWORD': 'root', 
        'HOST': '', 
        'PORT': '', 
    } 

我有一个路由器来管理读写

def db_for_read(self, model, **hints): 
    if model._meta.app_label == "auth" or model._meta.app_label == "sessions" or model._meta.app_label == "contenttypes": 
        return "auth_db" 
    return None 
 
def db_for_write(self, model, **hints): 
    if model._meta.app_label == "auth" or model._meta.app_label == "sessions" or model._meta.app_label == "contenttypes": 
        return "auth_db" 
    return None 
 
def allow_syncdb(self, db, model): 
 
    return  True  

每当我执行 syncdb 时,所有应用程序内容类型都会在“auth_db”中更新。我想停止这个并与“默认”数据库同步。这样所有表都只会在默认数据库中创建和更新。

当项目运行时,它将根据路由器配置使用读写。

我该怎么做?

请您参考如下方法:

我通过更新写入函数修复了它

def db_for_write(self, model, **hints): 
    if model._meta.app_label in ("sessions",) : 
        return "auth_db" 
    return "default" 

这样syncdb就不会向“auth”和“contenttypes”写入任何数据