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

Posted

技术标签:

【中文标题】Django 1.4 多个数据库外键关系(1146,“表\'other.orders_iorder\'不存在”)【英文标题】:Django 1.4 Multiple Databases Foreignkey relationship (1146, "Table 'other.orders_iorder' doesn't exist")Django 1.4 多个数据库外键关系(1146,“表'other.orders_iorder'不存在”) 【发布时间】:2012-08-03 08:44:55 【问题描述】:

我有一个外键从一个模型到另一个数据库中的另一个模型(我知道我不应该这样做,但如果我妥善处理参照完整性,这应该不是问题)。

问题是一切正常......所有系统都可以(任何方向的关系,路由器都会处理它)但是当我尝试删除引用的模型时(它没有外键属性) ...Django仍然想通过关系来检查关系是否为空,但是相关对象在另一个数据库中,所以它在这个数据库中找不到对象。

我尝试设置 on_delete=models.DO_NOTHING 没有成功。还试图清除关系(但很明显没有“使用”参数,所以我也不起作用)。也试过用delete(objects...)清空关系,没有成功。

现在我很确定问题出在 super(Object,self).delete() 中,我不能做 super(Object,self).delete(using=other_database) 因为 self 对象不在另一个数据库中RelatedManager 是。所以我不知道如何让 Django 理解我什至不想检查这种关系,顺便说一句,在 super(Object,self).delete() 请求之前它已经被清空了。

我在想是否有一些方法可以让 Django 避免这种检查。

更多图形:

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

from django.db import models from shop.models import Order

类 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:“其他”数据库

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

有什么想法吗?提前致谢,

【问题讨论】:

请别告诉我我不应该使用 delete() 我知道我可以使用 pre_delete() 或 post_delete() 方法....但是问题的本质仍然存在...delete() 本身正在尝试考虑空关系并在查询错误的数据库时失败。 我已经解决了使用原始 SQL 删除命令更改 super(Order,self).delete() 的问题。无论如何,我很想知道是否有更合适的方法来做到这一点。 【参考方案1】:

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

【讨论】:

我也有同样的问题:***.com/questions/64544284/…

以上是关于Django 1.4 多个数据库外键关系(1146,“表'other.orders_iorder'不存在”)的主要内容,如果未能解决你的问题,请参考以下文章

Django过滤多个外键关系

Django模型加入一对多关系以在模板中显示

如何使用 Django 中同一个表的多个外键来管理删除?

Django 模型:多个外键或一对一字段

没有外键关系实例的 Django 查询多对一关系

带有嵌套序列化程序的 Django 反向外键给出了多个结果