Django несколько баз данных django.db.utils.OperationalError: нет такой таблицы: django_content_type
Я пытаюсь хранить свои таблицы celery tasks в базе данных tasks
, которая не имеет ничего общего с другими таблицами, но я продолжаю получать эту ошибку.
sqlite3.OperationalError: нет такой таблицы: django_content_type
я бы предпочел не иметь лишних таблиц, которые я не использую в задачах celery, таких как пользователи или другие мои модели
Итак, я создал две абстрактные модели для своих баз данных:
class TaskModel(models.Model):
class Meta:
abstract = True
_db = 'tasks'
class CeleryTasks(TaskModel):
...
class DefaultModel(models.Model):
class Meta:
abstract = True
_db = 'default'
class MyDefaultDatabaseModel(DefaultModel):
...
и мой маршрутизатор базы данных выглядит так:
class DatabaseRouter:
tasks_models = ['CeleryTasks']
def db_for_read(self, model, **hints):
""" reading model based on params """
if not hasattr(model, 'Meta'):
return None
return getattr(model.Meta, '_db', None)
def db_for_write(self, model, **hints):
""" writing model based on params """
if not hasattr(model, 'Meta'):
return None
return getattr(model.Meta, '_db', None)
def allow_relation(self, obj1, obj2, **hints):
if hasattr(obj1._meta, '_db') and hasattr(obj2._meta, '_db'):
return obj1._meta._db == obj2._meta._db
return None
def allow_migrate(self, db, app_label, model_name=None, **hints):
print(
f'allow migration database router invoked with args db={db},app_label={app_label},model_name={model_name},hints={hints}')
if db == 'tasks':
if model_name in self.tasks_models:
print('returning True')
return True
print('returning False')
return False
print('returning None')
return None
и мои полные журналы ошибок могут помочь: