2

我有一个外键从一个模型到另一个模型在differente数据库(我知道我不应该这样做,但是,如果我照顾正确的参考完整性,它不应该是一个问题)。Django 1.4多个数据库Foreignkey关系(1146,“表'other.orders_iorder'不存在”)

事情是,一切工作正常......所有的系统(任何方向的关系,路由器照顾它),但是当我尝试删除引用的模型(它没有外键属性)... Django仍然希望检查关系以检查关系是否为空,但相关对象位于另一个数据库上,因此它不会在此数据库中找到该对象。

我试图设置on_delete = models.DO_NOTHING没有成功。也试图清除关系(但它发生明确没有“使用”参数,所以我也不工作)。还试图清空关系删除(对象...),没有成功。 (Object,self).delete(),我不能做super(Object,self).delete(using = other_database),因为self对象不在另一个数据库中只是RelatedManager是。所以我不知道如何让Django理解我甚至不想检查这种关系,这种关系在super(Object,self).delete()请求之前已经被清空了。

我在想如果有一些方法我可以重写使Django避免这种检查。

更多的图形:

DB1: “默认” 数据库(订单APP)

从shop.models django.db进口车型进口秩序

类IOrder(车型。型号):

name = models.CharField(max_length=20, unique=True, blank=False, null=False) 
order = models.ForeignKey(Order, related_name='iorders', blank=True, null=True) 

DB2: “其他” 数据库

类订单(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() 

的问题发生在晚饭(Order.self).delete()被调用,那么它无法在此数据库中找到表(iorder)(因为它处于“默认”状态)

有些想法吗?在此先感谢,

+0

Pease,别告诉我我不应该使用delete()我知道我可以使用pre_delete()或post_delete()方法...但问题的实质仍然存在...... delete()本身试图去思考空关系,并在查询错误的数据库时失败。 – 2012-08-06 11:48:02

+0

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

回答

2

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