'>' не поддерживается между экземплярами 'dict' и 'dict' в Django 3.0

Я использую Django 3.0 и Python 3.7

вот мой views.py

@login_required
def updated_status(request, pk):
    s1 = []
    purchase_quantity = Item.objects.filter(order_id=pk)
    data = set()
    a = [x.id for x in purchase_quantity if x.id not in data and not data.add(x.id)]
    stock_quantity = Stock.objects.filter(other_id=pk)
    data1 = set()
    b = [x.other_item.id for x in stock_quantity if
         x.other_item.id not in data1 and not data1.add(x.other_item.id)]
    if data == data1:
        for j in data1:
            stock_quantity = Stock.objects.filter(other_order_id=pk,
                                                           other_item_id=j).aggregate(Sum('quantity'))
            purchase_quantity = Item.objects.filter(
                    other_id=pk, id=j).aggregate(Sum('quantity'))
            if stock_quantity > purchase_quantity:
                Order.objects.filter(id=pk).update(flag=1)
            if stock_quantity >= purchase_quantity:
                s1.append('true')
            else:
                s1.append('false')
            if 'false' in s1:
                Order.objects.filter(id=pk).update(status=3)
            else:
                Order.objects.filter(id=pk).update(status=2)
    else:
        pass
    return redirect(reverse('get_list_data'))

Как я могу решить эту проблему " TypeError: '>' not supported between instances of 'dict' and 'dict' "

Как stock_quantity, так и purchase_quantity здесь словари: нужно развернуть элемент из словаря, поэтому:

stock_quantity = StockMovements.objects.filter(
    other_order_id=pk, other_order_item_id=j
).aggregate(Sum('quantity'))['quantity__sum']
purchase_item_quantity = OtherOrderItem.objects.filter(
    other_order_id=pk, id=j
).aggregate(Sum('quantity'))['quantity__sum']

попробуйте это

Django aggregate return dict object.

https://docs.djangoproject.com/en/4.0/topics/db/aggregation/

for j in data1:
    stock_quantity = StockMovements.objects.filter(other_order_id=pk, other_order_item_id=j).aggregate(Sum('quantity'))
    purchase_item_quantity = OtherOrderItem.objects.filter(other_order_id=pk, id=j).aggregate(Sum('quantity'))
    if stock_quantity.get('quantity__sum') > purchase_item_quantity.get('quantity__sum'):
        OtherOrder.objects.filter(id=pk).update(flag=1)
    if stock_quantity.get('quantity__sum') >= purchase_item_quantity.get('quantity__sum'):
        pass

aggregate() - это заключительное предложение для QuerySet, которое при вызове, возвращает словарь пар имя-значение. Имя - это идентификатор для значения агрегата; значение - вычисленный агрегат. Имя автоматически генерируется из имени поля и агрегатной функции. Если вы хотите вручную указать имя для агрегатного значения, вы можете сделать это, указав это имя, когда вы определяете агрегирующее предложение:

Вернуться на верх