假设您有以下型号:
class Connect:
a = models.ForeignKey(A)
b = models.ForeignKey(B)
为了连接模型A
和B
(此表是出于数据目的所必需的,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。我该如何做到这一点?
答案 0 :(得分:2)
如果您想要A对象,请从A。
开始a_objs = A.objects.filter(connect__b=b_model)
答案 1 :(得分:0)
在A
或B
上,您可以使用以下代码为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}}模型。