2

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

问题是一切正常......所有系统都可以(任何方向的关系,路由器都会处理它)但是当我尝试删除引用的模型(没有外键属性)时...... 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 类(模型。模型):

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)(因为它处于“默认”状态)

有什么想法?提前致谢,

4

1 回答 1

2

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

于 2012-08-08T00:05:14.740 回答