Django error : 'текущий маршрутизатор базы данных не допускает этого отношения'.
У меня есть 2 модели (клиент, заказ) в двух разных базах данных sqlite3 (custdb и orddb), помимо базы данных по умолчанию.
Settings.py:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
},
'custdb': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'custdb.sqlite3',
},
'orddb': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'orddb.sqlite3',
}
}
DATABASE_ROUTERS = ['customer.router.custrouter', 'order.router.ordrouter']
В App 'customer', в models.py, ниже определен класс модели customer (здесь показано только определение класса)
class customer(models.Model):
name = models.CharField(max_length=50)
phone = models.IntegerField()
Под заказ App, в models.py, ниже определена модель заказа (здесь показано только определение класса)
class order(models.Model):
ordername = models.CharField(max_length=50)
customer = models.ForeignKey(cust, default=None, null=True, on_delete = models.SET_NULL)
В App 'customer', в router.py, я определил один класс маршрутизатора
class custrouter:
route_app_labels = {'customer'}
def db_for_read(self, model, **hints):
if model._meta.app_label in self.route_app_labels:
return 'custdb'
return None
def db_for_write(self, model, **hints):
if model._meta.app_label in self.route_app_labels:
return 'custdb'
return None
def allow_relations(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 True
def allow_migrate(self, db, app_label, model_name=None, **hints):
if app_label in self.route_app_labels:
return db == 'custdb'
return None
В App 'order', в router.py, я определил другой класс маршрутизатора
class ordrouter:
route_app_labels = {'order', 'customer'}
def db_for_read(self, model, **hints):
if model._meta.app_label in self.route_app_labels:
return 'orddb'
return None
def db_for_write(self, model, **hints):
if model._meta.app_label == 'order':
return 'orddb'
return None
def allow_relations(self, obj1, obj2, **hints):
db_list = ('custdb', 'orddb')
if obj1._state.db in db_list and obj2._state.db in db_list:
return True
return None
def allow_migrate(self, db, app_label, model_name=None, **hints):
if app_label == 'order':
return db == 'orddb'
return None
Я могу вставить запись в таблицу customer, но при попытке вставить запись в таблицу order через интерфейс администратора, я получаю следующую ошибку:
Cannot assign "<customer: John>": текущий маршрутизатор базы данных не позволяет использовать это отношение.
Может ли кто-нибудь из экспертов подсказать, как я могу добиться перекрестных отношений между базами данных?