Django queryset遍历(无求值)

2024-04-25 19:38:52 发布

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

假设您有以下模型:

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

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

假设我有一个特定的模型B,名为b_model

a_models = Connect.objects.filter(b=b_model)

上面是Connect对象的查询集。我想要一个A对象的查询集。下面将执行以下操作:

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

但这将评估查询集并创建一个列表。我想创建一个尚未计算的查询集,它是A对象的查询集。我怎样才能做到这一点?


Tags: 数据对象in模型目的objformodel
2条回答

如果你想要一个对象,从一个开始

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

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模型。你知道吗

相关问题 更多 >