如何在 django 中将两个具有一个公共字段的不同查询集合并为一个?

sur*_*raj 3 python django

我有 2 个查询集Sales_orderProc_order. 两者唯一的共同字段是product_id. 我想将这两个查询集合并为一个包含所有字段的查询集。

sales_order有字段product_id, sales_qty, sales_price

proc_order有字段product_id, proc_qty, proc_price。我想合并这两个以获得一个看起来像的查询集。

combined_report其中有字段product_id, sales_qty, sales_price``proc_qty, proc_price

我的最终目标是计算产品数量之间的差异。

我正在使用 Django 2.1

Pru*_*rot 5

您可以尝试这种方式来捕获所有值。

from django.db.models import Subquery, OuterRef, FloatField
from django.db.models.functions import Cast


subquery_qs = proc_order_qs.filter(product_id=OuterRef('product_id')

combined_qs = sales_order_qs.annotate(
    proc_qty = Cast(Subquery(subquery_qs.values('proc_qty')[:1]), output_field=FloatField()),
    proc_price = Cast(Subquery(subquery_qs.values('proc_price')[:1]), output_field=FloatField()))
Run Code Online (Sandbox Code Playgroud)

然后你就可以得到所有的值combined_qs

combined_qs.values('product_id','sales_qty','sales_price','proc_qty', 'proc_price')
Run Code Online (Sandbox Code Playgroud)