我如何使用我的django模型获得每个国家的产品数量



我在Django中有一个模型,我需要一种方法来获得每个国家的产品数量,以便我可以使用它来绘制图表。

NB:我在我的应用程序中使用django-countries包

models.py

from django.db import models
from django_countries.fields import CountryField
class Product(models.Model):
name = models.CharField(max_length=36)    user = models.ForeignKey(User, on_delete=models.CASCADE)
is_favourite = models.ManyToManyField(User, related_name='favourite', blank=True)
country = CountryField(blank_label='(select country)')

我希望结果是这样的:美国:5吴:20山:8

等等,所以我可以用它来绘制图形。

您可以使用.annotate(…)[Django-doc]:

from django.db.models import Count
Product.objects.values('country').annotate(
number=Count('pk')
).order_by('country')

这将使QuerySet看起来像:

<QuerySet [
{'country': 'NG', 'number': 20},
{'country': 'SA', 'number': 8},
{'country': 'US', 'number': 5}
]>

我们可以将其转换为一个字典,将国家映射到相应的数字:

from django.db.models import Count
qs = Product.objects.values('country').annotate(
number=Count('pk')
).order_by('country')
result = {
q['country']: q['number']
for q in qs
}

最新更新