django中的双反向查找?

时间:2015-01-22 20:05:17

标签: django django-models django-queryset

考虑以下定义:

class A(models.Model):
    ...

class B(models.Model):
    a_obs = models.ForeignKey(A, related_name='b')

class C(models.Model):
    b_obs = models.ForeignKey(B, related_name='c')

假设我们有ob1类型的实例A。如何在不使用Cob1经理的情况下获取与C.objects相关的所有B.objects个实例进行双向反向查找?

正常情况下,ob1.b.all()会给我一个QuerySet B个,但那么呢?

1 个答案:

答案 0 :(得分:0)

执行"双反向查找"耗费了大量资源。您确定数据不能以其他方式构建吗?

为了回答您的问题,我找到了可能符合您要求的解决方案here。尝试做:

# You start with object A as objA
objsB = objA.b.all()
requested_c_objects = [C.objects.filter(b_obs=b) for b in objsB]

我还没有对它进行测试,因此它可能包含错误,但希望您明白这一点。

P.S。:没有*.objects是不可能做到的。尝试添加自己的Manager方法或直接在SQL语法中执行。