Как объединить два разных набора запросов с одним общим полем в один в django?
У меня есть 2 набора запросов Sales_order и Proc_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
вы можете попробовать сделать что-то вроде этого:
views.py
from itertools import chain
def yourview(request):
Sales_order = ....
Proc_order = ....
combined_report = chain(Sales_order,Proc_order)
Вы можете попробовать этот способ, чтобы захватить все значения.
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()))
И тогда вы сможете получить все значения в combined_qs
combined_qs.values('product_id','sales_qty','sales_price','proc_qty', 'proc_price')