首页 > 解决方案 > 从 Listview 中的其他模型获取字段的总和

问题描述

我有以下两个模型:

模型.py

class Model_Item(models.Model):
    item_name = models.CharField(max_length = 100, null = False, blank = False, unique = True)

    def __unicode__(self):
        return self.item_name

class Model_ItemTransaction(models.Model):
    item = models.ForeignKey(Model_Item, to_field = "item_name")
    item_sold = models.FloatField(null = True, blank = True)

    def __unicode__(self):
        return self.item

使用此列表视图:

视图.py

class View_Item(ListView):
    def get_queryset(self):
        queryset = Model_Item.objects.all()
        queryset = queryset.annotate(
                sum_ = Sum(When(model_itemtransaction__item_sold))
            )
        return queryset

我的目标是获取每个项目的“item_sold”的总值,并在 Listview 上显示这个值。我怎样才能使这项工作?

我一直在查看条件表达式this stackoverflow post,但无济于事。

标签: django

解决方案


你不应该需要使用条件聚合,你只需要总和

 queryset = queryset.annotate(
    sum_ = Sum('model_itemtransaction__item_sold')
 )

推荐阅读