django注释不能正常工作

时间:2017-08-18 21:00:20

标签: django django-models django-views

我有两个模型SaleItemProduct。在这里,我想得到products表中SaleItem的计数。我使用了注释但没有得到理想的结果

class SaleItem(models.Model):
    product = models.ForeignKey(Product, related_name="sale_products")
    quantity = models.PositiveIntegerField()


class Product(models.Model):
    name = models.CharField(max_length=128)

views.py

SaleItem.objects.values("product__name").annotate(count=Count("product__name"))

当我在shell中尝试这个时。我得到所有产品的数量为1

<QuerySet [{'count': 1, 'product__name': u'Rice'}, {'count': 1, 'product__name': u'Rice'}, {'count': 1, 'product__name': u'Mango'}, {'count': 1, 'product__name': u'Mango'}, {'count': 1, 'product__name': u'Mango'}, {'count': 1, 'product__name': u'Apple'}, {'count': 1, 'product__name': u'Apple'}, {'count': 1, 'product__name': u'Apple'}, {'count': 1, 'product__name': u'Apple'}, {'count': 1, 'product__name': u'Grape'}, {'count': 1, 'product__name': u'Grape'}, {'count': 1, 'product__name': u'Grape'}, {'count': 1, 'product__name': u'Grape'}, {'count': 1, 'product__name': u'Grape'}, {'count': 1, 'product__name': u'Grape'}, {'count': 1, 'product__name': u'Grape'}, {'count': 1, 'product__name': u'Grape'}]>

这里我想要SaleItem表中每个产品的totalcount。我怎样才能做到这一点。有人请帮助我。

1 个答案:

答案 0 :(得分:1)

请检查:https://docs.djangoproject.com/en/1.11/topics/db/aggregation/#cheat-sheet

在示例中它有:

Each publisher, each with a count of books as a "num_books" attribute.
>>> from django.db.models import Count
>>> pubs = Publisher.objects.annotate(num_books=Count('book'))
>>> pubs
<QuerySet [<Publisher: BaloneyPress>, <Publisher: SalamiPress>, ...]>
>>> pubs[0].num_books
73

将它应用到你的案例中,我认为它应该是这样的:

sale_items = SaleItem.objects.annotate(product_count=Count("product__name"))

然后你可以做

sale_items[0].product_count

这将返回与一个销售商品相关的产品数量