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. Во всяком случае, я хотел бы знать, есть ли более правильный способ сделать это

Другие вопросы по тегам