У меня есть две базы данных, настроенные для моего проекта Django, MySQL и Postgres.
У меня есть маршрутизатор базы данных, и все работало нормально, пока я не изменил CharField
с max_length
из 300 в модели Postgres на уникальный.
Эта модель в Postgres, но теперь Django выдает эту ошибку о MySQL:
[postgres_app.TestModel.slug]: (mysql.E001) MySQL does not allow unique CharFields to have a max_length > 255.
Я дважды проверил маршрутизатор базы данных, и все выглядело нормально Я также должен еще раз упомянуть, что маршрутизатор правильно выполнял свою работу и выбрал правильную базу данных для чтения, записи и миграции. Вот мой роутер:
POSTGRES_APPS = ['postgres_app']
class PostgresRouter(object):
""" Controls which apps can have access to the postgres instance. """
def db_for_read(self, model, **hints):
""" Called on every read action on a model. """
if model._meta.app_label in POSTGRES_APPS:
return 'postgres'
return None
def db_for_write(self, model, **hints):
""" Called on every write action on a model. """
if model._meta.app_label in POSTGRES_APPS:
return 'postgres'
return None
def allow_relation(self, obj1, obj2, **hints):
""" Called only on migrations. Only allow relations if both models are in POSTGRES_APPS. """
return {obj1._meta.app_label, obj2._meta.app_label}.issubset(set(POSTGRES_APPS)) or None
def allow_migrate(self, db, app_label, model_name=None, **hints):
""" Called only on migrations. """
if db == 'postgres':
return app_label in POSTGRES_APPS
else:
return app_label not in POSTGRES_APPS
а это моя модель:
class TestModel(models.Model):
slug = models.CharField(max_length=300, blank=True, null=True, unique=True)
Таким образом, вопрос в том, является ли это ошибкой в Django или нет, и если нет, то как я могу сказать Django, что она ищет неправильную базу данных.