如何将queryset列添加到另一个queryset?

2024-04-25 06:51:25 发布

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

我有这个问题,我已经搜索了好几天,但我仍然没有找到解决方法。 我有一个查询集q1,它显示了一个model_id和一个列available 我想将该列添加到Model.objects.all()结果中,但问题是q1是计算可用金额的查询结果,因此没有可参考的表或模型。 有什么建议或解决方案吗

示例代码:

q1=Offer.Suboffer.through.objects.values("offer_id","suboffer_id").annotate(available=F("suboffer_id__Product_offer_id__Store_Amount")/F("suboffer_id__Amount")).values("offer_id", available=Min("available"))

我在我的项目的 OfferListView的方法get_queryset

所以这个方法返回的查询集是Offer.objects.all()。 在它返回之前,我想添加queryset q1available

q2=Offer.objects.all()

因此,我需要一种方法来使用这两个查询集q1和q2进行左连接,基本上设置输出查询集q2中可用的列

更新

我试图使q1查询集类似于q2,将q2字段手动添加到q1

q2=q1.values(available,Price=(F"offer_id__Price"),id=F("offer_id"))

(*我总结了这些值,但实际上我手动插入了6个值以使其与q2 queryset兼容)

以这种方式返回q2实现我想要的。。。但是我仍然想知道一种正确的方法,因为它看起来非常乏味,而且对于包含大量列的表来说,这应该是不可能的

最后更新 我想我明白了。添加OuterRef和子查询,并修改q1以将其转换为子查询

from django.db.models import OuterRef, Subquery
q1=q1.filter(offer_id=OuterRef("pk"))
q2=Offer.objects.annotate(available=Subquery(q.values("available")))

Tags: 方法idobjectsallamountavailablequerysetvalues