我有一个从一个模型到另一个数据库中的另一个模型的外键(我知道我不应该这样做,但如果我妥善处理参照完整性,这应该不是问题)。
问题是一切正常......所有系统都可以(任何方向的关系,路由器都会处理它)但是当我尝试删除引用的模型(没有外键属性)时...... 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)(因为它处于“默认”状态)
有什么想法?提前致谢,