Как перенести изменения Django в несколько баз данных

У меня есть проект Django 1.11, содержащий три приложения, page, book, а также fruit, Все модели в page а также book приложения существуют в базе данных по умолчанию page_dbтогда как все модели в fruit приложение существует на отдельном fruit_db База данных, которую я указываю через маршрутизатор базы данных, например:

class MyRouter(object):

    def db_for_read(self, model, **hints):
        if model._meta.app_label in ('page', 'book'):
            return 'page_db'
        elif model._meta.app_label == 'fruit':
            return 'fruit_db'

    def db_for_write(self, model, **hints):
        if model._meta.app_label in ('page', 'book'):
            return 'page_db'
        elif model._meta.app_label == 'fruit':
            return 'fruit_db'

    def allow_relation(self, obj1, obj2, **hints):
        if obj1._meta.app_label == obj2._meta.app_label:
            return True

    def allow_migrate(self, db, app_label, model_name=None, **hints):
        if db == 'fruit_db':
            allowed = app_label == 'fruit'
        elif db == 'page_db':
            allowed = app_label in ('page', 'book')
        else:
            allowed = None
        return allowed

Запуск миграций для page а также book приложения работают нормально. Тем не менее, когда я пытаюсь запустить миграцию для fruit приложение с:

 manage.py migrate fruit --database=fruit_db

Я получаю ошибку:

Traceback (most recent call last):
  File "manage.py", line 9, in <module>
    execute_from_command_line(sys.argv)
  File "/usr/local/myproject/.env/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 364, in execute_from_command_line
    utility.execute()
  File "/usr/local/myproject/.env/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 356, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/local/myproject/.env/local/lib/python2.7/site-packages/django/core/management/base.py", line 283, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/usr/local/myproject/.env/local/lib/python2.7/site-packages/django/core/management/base.py", line 330, in execute
    output = self.handle(*args, **options)
  File "/usr/local/myproject/.env/local/lib/python2.7/site-packages/django/core/management/commands/migrate.py", line 86, in handle
    executor.loader.check_consistent_history(connection)
  File "/usr/local/myproject/.env/local/lib/python2.7/site-packages/django/db/migrations/loader.py", line 298, in check_consistent_history
    connection.alias,
django.db.migrations.exceptions.InconsistentMigrationHistory: Migration book.0001_initial is applied before its dependency page.0001_initial on database 'fruit_db'.

Итак, хотя я указываю приложение для миграции и базу данных для запуска миграции, Django, похоже, пытается перенести другие приложения. Почему это? book Первоначальная миграция приложения зависит от page начальная миграция приложения, но ничего в fruit приложение зависит от любого book или же pageТак почему же Django пытается их перенести? Есть проблема с моим роутером?

Как я могу исправить эту ошибку?

0 ответов

Другие вопросы по тегам