Django和多重连接

2024-05-15 10:53:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着做一个很长的连接,但是django似乎无法处理最后一层。是我搞错了还是有办法解决这个问题?在

在模型.py在

class A(models.Model):
    object_id = models.IntegerField(primary_key=True)
    name = models.CharField(max_length=50)

class B(models.Model):
    class_A_object = models.ForeignKey(A, on_delete=models.PROTECT)
    value = models.CharField(max_length=50)

class C(models.Model):
    class_B_object = models.ForeignKey(B, on_delete=models.PROTECT)

class D(models.Model):
    value= models.IntegerField(primary_key=True)
    class_C_object = models.ForeignKey(C, on_delete=models.PROTECT)

然后我试图选择类D中的值,当相关的类A对象名=ABC。在

^{pr2}$

这失败了,从pycharm开始就拒绝自动完成它,如果我运行它,我会得到一个未定义名称的错误。在

但是,如果我掉一层就行了。在

D.objects.filter(class_C_object__class_B_object__value='ABC')

我没有发现任何文档提到最大连接数,但感觉这里有一个限制。在

有人知道如果是这样吗?如果是的话,最好的解决办法是什么?在

数据库在我的外部,无法修改。目前我唯一可行的解决方法是直接使用游标并手动编写sql。然而,由于很多原因,这并不理想。在

任何帮助都将不胜感激。在

谨致问候, 彼得


Tags: keytruemodelobjectvalueonmodelsprotect
1条回答
网友
1楼 · 发布于 2024-05-15 10:53:55

我已经解决了这个问题,也许不是最简单的解决方案,但是通过获得一个匹配名称ABC的queryset,然后使用该queryset作为a_uuin filter on D得到我想要的结果,它只执行一个查询。在

它可以工作,而且效率很高,但是代码不是很干净。如果有人有其他方法的建议,我会很高兴听到。在

谢谢, 彼得

相关问题 更多 >