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'不存在”)的主要内容,如果未能解决你的问题,请参考以下文章