【发布时间】:2010-01-20 18:26:42
【问题描述】:
我有这些模型:
A 类(型号): 通过
B级(型号): the_a = ForeignKey(A)
C 类(型号): the_b = ForeignKey(B)
在代码的某处,我有一个 A 实例。我知道如何让所有 B 与 A 相关联; A.b_set.all() - 但是有没有办法让所有的 C 与我的 A 相关联的所有 B 相关联,而不需要做很多查询?
【问题讨论】:
我有这些模型:
A 类(型号): 通过
B级(型号): the_a = ForeignKey(A)
C 类(型号): the_b = ForeignKey(B)
在代码的某处,我有一个 A 实例。我知道如何让所有 B 与 A 相关联; A.b_set.all() - 但是有没有办法让所有的 C 与我的 A 相关联的所有 B 相关联,而不需要做很多查询?
【问题讨论】:
您可以执行此查询以获取所有通过 B 关联到 A 的 C:
C.objects.filter(the_b__the_a=instance_of_a)
instance_of_a 是 A 类的某个实例。
欲了解更多信息,请参阅http://docs.djangoproject.com/en/dev/topics/db/queries/#lookups-that-span-relationships
【讨论】:
这并不能直接回答您的问题,但可以通过单个查询在直接 SQL 中使用,因此在 Django 中也可以,但这取决于它们对 SQL 的包装器的编写方式。
例子:
SELECT C.* FROM B,C WHERE C.the_b = B.id AND B.the_a = ?
其中?是你感兴趣的A的ID。
【讨论】:
好的,我应该有 RTM:
my_a = A 的一些实例
cs_for_my_a = C.objects.filter(the_b__the_a=my_a)
【讨论】: