Ответы makemigrations Никаких изменений не обнаружено, если указан app_label - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть 2 базы данных mysql, и я хочу создать новую модель для второй (analysis_db), но после запуска makemigrations он говорит: «Изменения не обнаружены».Вот мои коды

В settings.py (я добавил myapp в INSTALLED_APPS)

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': DB_DEFAULT_NAME,
        'USER': DB_USER,
        'PASSWORD': DB_PASSWORD,
        'HOST': DB_HOST,
        'PORT': '',
        'OPTIONS': {
            'sql_mode': 'traditional',
        }
    },
    'analysis_db': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': DB_ANALYSIS_NAME,
        'USER': DB_USER,
        'PASSWORD': DB_PASSWORD,
        'HOST': DB_HOST,
        'PORT': '',
        'OPTIONS': {
            'sql_mode': 'traditional',
        }
    }
}
DATABASE_ROUTERS = ['my_project.routers.TestRouter']

В routers.py

class TestRouter:
    """
    A router to control all database operations on models in the
    auth application.
    """
    def db_for_read(self, model, **hints):
        if model._meta.app_label == 'analysis_data':
            return 'analysis_db'
        return None

    def db_for_write(self, model, **hints):
        if model._meta.app_label == 'analysis_data':
            return 'analysis_db'
        return None

    def allow_relation(self, obj1, obj2, **hints):
        if obj1._meta.app_label == 'analysis_data' or \
           obj2._meta.app_label == 'analysis_data':
           return True
        return None

    def allow_migrate(self, db, app_label, model_name=None, **hints):
        if app_label == 'analysis_data':
            return db == 'analysis_db'
        return None

В models.py

class TestModel(models.Model):
    id = models.AutoField(primary_key=True)
    val1 = models.IntegerField()
    val2 = models.IntegerField()

    class Meta:
        app_label = 'analysis_data'
        db_table = 'test_table_on_db'

Однако, если я удаляю app_label = 'analysis_data' из models.py и снова запускаю makemigrations, он работает, но таблица была создана на базе данных по умолчанию.У кого-нибудь есть такая же проблема?

Спасибо:)

1 Ответ

0 голосов
/ 12 сентября 2018

Я думаю, что для "app_label" в ваших моделях должно быть указано имя приложения, установленного в настройке INSTALLED_APPS.Вы упоминаете, что добавили «myapp» в INSTALLED_APPS, но как насчет «analysis_data»?

Если вы используете имя приложения "analysis_data" и нет приложения с таким именем, оно не будет выполнять миграции для этого приложения, поскольку оно не существует.

чтобы исправить это, вы должны переместить свою модель для «analysis_data» в другое приложение Django (вы можете иметь несколько приложений в одном проекте) и явно добавить ее в INSTALLED_APPS.Затем, когда вы запускаете python manage.py makemigrations analysis_data, это должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...