Django 1.4 Несколько баз данных Отношения с иностранными ключами (1146, "Таблица" other.orders_iorder "не существует")
У меня есть Внешний ключ из одной модели в другую модель в другой базе данных (я знаю, что не должен этого делать, но если я должным образом позабочусь о ссылочной целостности, это не должно быть проблемой).
Дело в том, что все работает нормально... вся система работает (отношения в любом направлении, маршрутизатор позаботится об этом), но когда я пытаюсь удалить ссылочную модель (у которой нет атрибута внешнего ключа)...Django по-прежнему хочет пройти через отношение, чтобы проверить, является ли отношение пустым, но связанный объект находится в другой базе данных, поэтому он не находит объект в этой базе данных.
Я попытался настроить on_delete=models.DO_NOTHING, но безуспешно. Также пытался очистить отношения (но бывает так, что у них нет аргумента "использование", поэтому я тоже не работаю). Также попытался очистить отношения с помощью delete (objects...), но безуспешно.
Теперь я почти уверен, что проблема в super (Object, self).delete (), я не могу сделать super (Object, self).delete (using = other_database), потому что объект self не находится в другой базе данных, а просто RelatedManager, Так что я не знаю, как заставить Джанго понять, что я не хочу даже проверять эти отношения, которые, кстати, уже были очищены до запроса super (Object, self).delete ().
Я думал, есть ли какой-нибудь метод, который я могу переопределить, чтобы Django избежал этой проверки.
Более графический:
DB1: база данных "по умолчанию" (приложение заказов)
из django.db импорт моделей из shop.models импорт Заказать
Класс IOrder (models.Model):
name = models.CharField(max_length=20, unique=True, blank=False, null=False) order = models.ForeignKey(Order, related_name='iorders', blank=True, null=True)
DB2: "другая" база данных
Класс заказа (модели. Модель):
description = models.CharField(max_length=20, blank=False, null=False) def delete(self): # Delete iOrder if any for iorder in self.iorders.using('default'): iorder.delete() # Remove myself super(Order, self).delete()
Проблема возникает, когда вызывается supper (Order.self).delete (), тогда он не может найти таблицу (iorder) в этой базе данных (потому что она находится в "default")
Какая-то идея? Заранее спасибо,
1 ответ
Я уже решил свою проблему, изменив super(Order,self).delete() с помощью необработанной команды удаления SQL. Во всяком случае, я хотел бы знать, есть ли более правильный способ сделать это