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

时间:2011-09-09 11:11:33

标签: django django-models django-syncdb

我已经设置了一个数据库路由器,使用db_for_readdb_for_write路由器方法将不同的应用和不同的模型定向到不同的数据库。

除非./manage.py syncdb不尊重这些路由器设置,否则效果非常好。

当我syncdb我的模型时,所有模型都是在默认数据库中创建的。

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

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

1 个答案:

答案 0 :(得分:9)

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

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

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