Django - 为什么syncdb不尊重数据库路由器?

Dan*_*gen 3 django django-models django-syncdb

我已经建立了一个数据库,路由器直接不同的应用程序和不同的模型来使用不同的数据库db_for_readdb_for_write路由器的方法.

这非常有效,除了./manage.py syncdb不尊重这些路由器设置.

syncdb我的模型,所有这些都是在默认数据库中创建的.

数据库路由器仅提供allow_syncdb方法,但没有sync_to方法.有没有办法告诉syncdb命令在哪里创建新表?

注意:我无法使用该--database功能,因为有时某些模型应用程序会转到与应用程序其余部分不同的数据库.

小智 9

编写路由器时,请确保已编写allow_syncdb()方法.它需要数据库和模型.当你跑步时,manage.py syncdb你实际上是在设置--database=default.如果您不希望模型同步到默认数据库,那么您的allow_syncdb()方法应该返回False作为条件db==default and model._meta.app_label==myapp.

您需要运行带有进入该数据库的--database=your_other_db选项的syncdb myapp.但请确保在这种情况下allow_syncdb()仅针对该情况返回True db==your_other_db and model._meta.app_label==myapp.

那有意义吗?基本上,您必须manage.py syncdb为每个数据库运行一次该方法两次.您不能只运行一次并让它更新两个数据库.