我试图做一个很长的连接,但似乎django无法处理最后一层。我弄错了还是有办法解决这个问题?
Models.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)
然后我尝试在相关的A类对象名称= ABC时选择D类中的值。
D.objects.filter(class_C_object__class_B_object__class_A_object__name='ABC')
这失败了,从pycharm开始拒绝自动完成它,如果我运行它,我得到一个名称未定义错误。
但是,如果我放下一层就可以了。
D.objects.filter(class_C_object__class_B_object__value='ABC')
我还没有找到任何提及最大连接数的文档,但感觉这里有一个限制。
有没有人知道是否属实,如果有,那么解决这个问题的最佳方法是什么?
数据库在我外部,无法修改。我目前唯一有效的解决方法是直接使用游标并手动编写sql。然而,由于很多原因,这并不理想。
非常感谢任何帮助。
亲切的问候, 彼得
答案 0 :(得分:0)
我已经解决了这个问题,也许不是最好的解决方案,但是通过获取A匹配名称ABC的查询集,然后使用该查询集在D上使用__in过滤器得到我想要的结果,它只是做一个查询。
它有效,并且效率很高,但代码不是很干净。如果有人建议采用另一种方法,我会很高兴听到。
谢谢, 彼得