Django наборов запросов для вычитания элементов - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть два набора запросов, чтобы получить значения для stock_in и stock_out. Как il oop вычесть stock_out из stock_in вот наборы запросов

    stock_in = OrderItems.objects.values('drug').annotate(
        quantity_received=Sum('quantity_received'),
    ).order_by('drug')
    stock_out = RequestItems.objects.values('drug').annotate(
        quantity_received=Sum('quantity_issued')
    ).order_by('drug')

Ответы [ 2 ]

0 голосов
/ 22 февраля 2020
def stock_list(request):
    stock_in = OrderItems.objects.values('drug__drugTitle','drug__drugCode', 'drug__denom_quantity').order_by('drug').annotate(quant_in=Sum('quantity_received'))
    stock_out = RequestItems.objects.values('drug__drugTitle', 'drug__drugCode', 'drug__denom_quantity').order_by('drug').annotate(quant_out=Sum('quantity_issued'))
    stock_available=[]
    index = 0
    for item in stock_out:
        if item is None:
            remaining_stc = stock_in[index]['quant_in']
            stock_available.append({'drug__drugTitle':stock_in[index]['drug__drugTitle'],'drug__drugCode':stock_in[index]['drug__drugCode'], 'drug__denom_quantity':stock_in[index]['drug__denom_quantity'], 'quantr':remaining_stc})
        else:
            remaining_stc = stock_in[index]['quant_in']-stock_out[index]['quant_out']
            stock_available.append({'drug__drugTitle':stock_in[index]['drug__drugTitle'],'drug__drugCode':stock_in[index]['drug__drugCode'], 'drug__denom_quantity':stock_in[index]['drug__denom_quantity'], 'quantr':remaining_stc})

        index = index + 1


    context = {
        "stock_available":stock_available,
        }
    return render(request, 'stock/stock_list.html', context)

0 голосов
/ 21 февраля 2020

Подход к нему из модели Drug. Это немного облегчает запрос.

Drug.objects.annotate(
    stock_in=Sum('orderitems_set__quantity_received'),
    stock_out=Sum('requestitems_set__quantity_issued'),
).annotate(
    current_stock=F('stock_in')-F('stock_out')
)

Или вы можете сделать это за один раз. Я не уверен.

Drug.objects.annotate(
    current_stock=Sum('orderitems_set__quantity_received') - Sum('requestitems_set__quantity_issued'),
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...