2011-09-09 53 views
3

我建立了一个数据库路由器,使用​​和db_for_write路由器方法将不同的应用程序和不同的模型导向不同的数据库。Django - 为什么syncdb不尊重数据库路由器?

这很好,除了./manage.py syncdb不尊重这些路由器设置。

当我syncdb我的模型,他们都是在默认的数据库中创建的。

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

注:我不能使用--database功能,因为有时候一些模型的应用程序到不同的数据库应用程序的其余部分。

回答

9

当你编写你的路由器时,确保你写了allow_syncdb()方法。它需要一个数据库和一个模型。当你运行manage.py syncdb时,你基本上设置了--database=default。如果您不希望模型同步到默认数据库,那么在db==default and model._meta.app_label==myapp的条件下,allow_syncdb()方法应返回False。

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

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

相关问题