Django queryset遍历(无评估)

时间:2014-07-23 14:27:37

标签: python django django-models

假设您有以下型号:

class Connect:
    a = models.ForeignKey(A)
    b = models.ForeignKey(B)

为了连接模型AB(此表是出于数据目的所必需的,m2m字段是不够的)

假设我有一个名为B

的特定模型b_model
a_models = Connect.objects.filter(b=b_model)
上面的

将是Connect个对象的QuerySet。我想要一个A个对象的QuerySet。以下将这样做:

a_models = [obj.a for obj in Connect.objects.filter(b=b_model)]

但这会评估QuerySet并创建一个列表。 我想创建一个尚未评估且属于A个对象的QuerySet。我该如何做到这一点?

2 个答案:

答案 0 :(得分:2)

如果您想要A对象,请从A。

开始
a_objs = A.objects.filter(connect__b=b_model)

答案 1 :(得分:0)

AB上,您可以使用以下代码为ManyToManyField定义Connect(通过class A(models.Model): ... b_models= models.ManyToManyField(B, through='Connect', through_fields=('a', 'b'), related_name='a_models')

a_model.b_models  # queryset of Bs

现在您可以使用

遍历两种方式
b_model.a_models  # queryset of As

Connect

您不必直接查询{{1}}模型。