Django aggregate(sum error

holgip5t  于 2023-10-21  发布在  Go
关注(0)|答案(2)|浏览(111)

我尝试在使用pk过滤对象后对一个完整的字段求和。

视图.py

def items(request, pk):
    current_user = request.user
    selected_itemz = get_object_or_404(ItemIn, pk=pk)
    all_cats = Category.objects.all()
    cat_count = all_cats.count()
    item_count = ItemIn.objects.values_list('item_name', flat=True).distinct().count()  # returns a list of tuples..
    #all_units = Item.objects.aggregate(Sum('item_quantity'))['item_quantity__sum']
    ItemOut_table = ItemOut.objects.all().filter(item_name=selected_itemz)
    ItemOut_quantity = ItemOut_table.aggregate(Sum('item_quantity'))['item_quantity__sum']

    context = {
        #'all_units': all_units,
        'item_count': item_count,
        'cat_count': cat_count,
        'current_user': current_user,
        'ItemOut_quantity': ItemOut_quantity,
        'selected_itemz':selected_itemz,
    }

    return render(request, 'townoftech_warehouse/item_details.html', context)

然后,我使用了一个额外的过滤器,我创建了这是subtract在我的HTML

HTML

<br>
  <br>
  <p align="right">
  الكمية الموجودة:
       {{ selected_itemz.item_quantity|subtract:ItemOut_quantity }}
      </p>
  <br>
  <br>

这是tempaltetags文件

from django import template

register = template.Library()

@register.filter
def subtract(value, arg):
    return value - arg

现在我得到了错误:

TypeError at /item/1/
unsupported operand type(s) for -: 'int' and 'NoneType'
kh212irz

kh212irz1#

如果对空查询集求和,则求和结果为**None**。然后在你的视图中,你从一个整数中减去None,但是Python没有办法从一个整数中减去None,因此出现了错误。
你可以使用or 0,在你的视图中将None替换为零:

ItemOut_quantity = ItemOut_table.aggregate(sum=Sum('item_quantity'))['sum'] or 0
vzgqcmou

vzgqcmou2#

Django使用Coalesce函数来实现这一点。你也可以使用它。

from django.db.models.functions import Coalesce

ItemOut_quantity = ItemOut_table.aggregate(
    sum=Coalesce(Sum('item_quantity'), 0)
).get('sum')

相关问题