Создание таблиц переноса Django не согласовано — несколько устаревших баз данных

#python #sql-server #django #django-migrations

Вопрос:

Я новый пользователь Django, и у меня, похоже, возникли некоторые проблемы с созданием таблиц с помощью миграции Django в мою устаревшую базу данных (SQL Server). В принципе, у меня есть 3 устаревшие базы данных (comp1_db, comp2_db, comp3_db), в которых я настроил маршрутизацию следующим образом (в основном одинаковую для каждой):

 **db_routers.py** 
class comp1Router:
    route_app_labels = {'contenttypes','shared_invoice_detail'}

    def db_for_read(self, model, **hints):
        if model._meta.app_label in self.route_app_labels:
            return 'comp1_db'
        return None

    def db_for_write(self, model, **hints):
        if model._meta.app_label in self.route_app_labels:
            return 'comp1_db'
        return None

    def allow_relation(self, obj1, obj2, **hints):
        if (
            obj1._meta.app_label in self.route_app_labels or
            obj2._meta.app_label in self.route_app_labels
        ):
           return True
        return None

    def allow_migrate(self, db, app_label, model_name=None, **hints):
        if app_label in self.route_app_labels:
            return db == 'comp1_db'
        return None

class comp2Router:
    route_app_labels = {'contenttypes','shared_invoice_detail'}

    def db_for_read(self, model, **hints):
        if model._meta.app_label in self.route_app_labels:
            return 'comp2_db'
        return None

    def db_for_write(self, model, **hints):
        """
        Attempts to write auth and contenttypes models go to auth_db.
        """
        if model._meta.app_label in self.route_app_labels:
            return 'comp2_db'
        return None

    def allow_relation(self, obj1, obj2, **hints):
        if (
            obj1._meta.app_label in self.route_app_labels or
            obj2._meta.app_label in self.route_app_labels
        ):
           return True
        return None

    def allow_migrate(self, db, app_label, model_name=None, **hints):
        if app_label in self.route_app_labels:
            return db == 'comp2_db'
        return None

class comp3Router:
    route_app_labels = {'contenttypes','shared_invoice_detail'}

    def db_for_read(self, model, **hints):
        if model._meta.app_label in self.route_app_labels:
            return 'comp3_db'
        return None

    def db_for_write(self, model, **hints):
        """
        Attempts to write auth and contenttypes models go to auth_db.
        """
        if model._meta.app_label in self.route_app_labels:
            return 'comp3_db'
        return None

    def allow_relation(self, obj1, obj2, **hints):
        if (
            obj1._meta.app_label in self.route_app_labels or
            obj2._meta.app_label in self.route_app_labels
        ):
           return True
        return None

    def allow_migrate(self, db, app_label, model_name=None, **hints):
        if app_label in self.route_app_labels:
            return db == 'comp3_db'
        return None

**settings.py** router section
DATABASE_ROUTERS = ['routers.db_routers.comp1Router',
                    'routers.db_routers.comp2Router',
                    'routers.db_routers.comp3Router',
                    ]

**models.py** (part of it)
class DJ_ArInvoiceHandover(models.Model):
    document_no = models.CharField(db_column='Document No', primary_key=True, max_length=20)  # Field name made lowercase. Field renamed to remove unsuitable characters.
    transaction_type = models.CharField(db_column='Transaction Type', max_length=10, default= 'INV' )  # Field name made lowercase. Field renamed to remove unsuitable characters.
    limit = models.Q(app_label = 'shared_invoice_detail', model='ArInvoiceMain')|models.Q(app_label = 'shared_invoice_detail', model='ArInvoiceMainHist')
    content_type = models.ForeignKey(ContentType, limit_choices_to = limit, on_delete=models.CASCADE, default='')
    content_object = GenericForeignKey('content_type', 'document_no')
    handover_by =  models.CharField(db_column='Handover By', max_length=20, blank=True, null=False, default='')
    handover_datetime = models.DateTimeField(db_column='Handover DateTime', blank=True, null=True)
    last_updated = models.DateTimeField(db_column = 'Last Updated', auto_now=True)

    def __str_(self):
        return self.document_no

    class Meta:
        managed = True
        db_table = 'DJ_AR_Invoice_Handover'
 

У меня нет проблем с чтением данных из всех 3 баз данных, но когда я пытаюсь создать новую модель (следовательно, таблицу) во всех 3 базах данных, и все, кажется, работает нормально. Однако я вижу только таблицу, созданную в базе данных comp1. Я теряюсь в том, в чем проблема …..Любая помощь в этом вопросе очень ценится, спасибо.

 python manage.py makemigrations
python manage.py migrate --database=comp1_db (I repeat for comp2 and comp3)
....
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying auth.0012_alter_user_first_name_max_length... OK
  Applying sessions.0001_initial... OK
  Applying shared_invoice_detail.0001_initial... OK
  Applying shared_invoice_detail.0002_dj_arinvoicehandover... OK
 

Комментарии:

1. Вы читали это? docs.djangoproject.com/en/3.2/howto/legacy-databases . А также, пожалуйста, поделитесь своими моделями

2. Привет, да, я читал это раньше и убедился, что класс моей модели meta managed=True. Я также включил модель, которую пытаюсь перенести в базу данных. Я не могу поделиться всем, потому что их слишком много.