Django 1.4多个数据库外键关系(1146,“表'other.orders_iorder'不存在”)

时间:2012-08-06 11:20:09

标签: django foreign-key-relationship cascading-deletes multiple-databases

我在一个不同的数据库中有一个外键从一个模型到另一个模型(我知道我不应该这样做,但如果我正确地注意参考完整性,它应该不是问题)。

问题是一切正常......所有系统都做(任何方向的关系,路由器负责)但是当我尝试删除引用的模型(没有外键属性) ... Django仍然希望通过关系来检查关系是否为空,但相关对象是在另一个数据库上,因此它在此数据库中找不到该对象。

我尝试设置on_delete = models.DO_NOTHING但没有成功。还尝试清除关系(但它发生清楚没有“使用”参数所以我也没有工作)。还尝试用delete(对象......)清空关系,但没有成功。

现在我很确定问题是在super(Object,self).delete()中,我不能做super(Object,self).delete(using = other_database)因为self对象不在另一个数据库中RelatedManager是。所以我不知道如何让Django理解我甚至不想检查那个关系,顺便说一下,在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:“其他”数据库

  

class Order(models.Model):

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 个答案:

答案 0 :(得分:2)

我已经解决了使用原始SQL删除命令更改super(Order,self).delete()的问题。无论如何,我很想知道是否有更合适的方法来做到这一点