Django - Почему syncdb не уважает маршрутизатор базы данных? - PullRequest
3 голосов
/ 09 сентября 2011

Я настроил маршрутизатор базы данных для направления разных приложений и разных моделей в разные базы данных, используя методы db_for_read и db_for_write.

Это работает очень хорошо, за исключением того, что ./manage.py syncdb не уважает эти настройки маршрутизатора.

Когда я syncdb моих моделей, все они создаются в базе данных по умолчанию.

Маршрутизатор базы данных предоставляет только метод allow_syncdb, но не метод sync_to. Есть ли способ сообщить команде syncdb, где создавать новые таблицы?

Примечание: Я не могу использовать функцию --database, так как иногда некоторые приложения модели находятся в другой базе данных, чем остальные приложения.

1 Ответ

9 голосов
/ 28 сентября 2011

Когда вы пишете свой маршрутизатор, убедитесь, что вы написали метод allow_syncdb ().Требуется база данных и модель.Когда вы запускаете manage.py syncdb, вы по существу устанавливаете --database=default.Если вы не хотите, чтобы ваши модели синхронизировались с базой данных по умолчанию, тогда ваш метод allow_syncdb () должен вернуть False для условия, что db==default and model._meta.app_label==myapp.

Вам нужно будет запустить syncdb с опцией --database=your_other_dbчтобы получить myapp в эту базу данных.Но убедитесь, что в этом случае allow_syncdb () возвращает True только для случая, когда db==your_other_db and model._meta.app_label==myapp.

Имеет ли это смысл?В основном вам нужно запустить метод manage.py syncdb дважды, по одному для каждой базы данных.Вы не можете запустить его только один раз и заставить обновить обе базы данных.

...