Al *_*laj 4 python django django-models django-queryset
我很难思考如何实现这一目标。我有 3 个相当简单的模型:
\n\nclass Country(models.Model):\n name = models.CharField(max_length=200, null=True, blank=True)\n def __str__(self):\n return self.name\n\nclass Seller(models.Model):\n name = models.CharField(max_length=200, null=True, blank=True)\n country = models.ForeignKey(Country, null=True, blank=True, on_delete=models.SET_NULL)\n def __str__(self):\n return self.name\n\nclass Order(models.Model):\n order = models.PositiveIntegerField(null=True, blank=True)\n seller = models.ForeignKey(Seller, null=True, blank=True, on_delete=models.SET_NULL)\n order_date = models.DateField(max_length=200, null=True, blank=True)\n def __str__(self):\n return self.name\nRun Code Online (Sandbox Code Playgroud)\n\n“订单”是简单的产品订单,“卖家”是我们供货的企业,“国家”定义了这些卖家所在的国家/地区。可能的情况是,在一个国家/地区我们有很多卖家,而在下一个国家/地区我们只有 1 个。
\n\n为了更好地理解我的问题,对命令的简化描述:
\n\nOrder N\xc2\xb0 1 by seller A from Germany\nOrder N\xc2\xb0 2 by seller B from Germany\nOrder N\xc2\xb0 3 by seller C from France\nOrder N\xc2\xb0 4 by seller D from Spain\nOrder N\xc2\xb0 5 by seller F from France\nRun Code Online (Sandbox Code Playgroud)\n\n我想要实现的是将来自该模型中存在的国家/地区的所有订单进行分组。例如:(
\n\nCountry | Count of all orders by country\n{Germany : 7 \nSpain : 12\nFrance : 5}\nRun Code Online (Sandbox Code Playgroud)\n\n我尝试过这样的事情:
\n\nOrder.objects.filter(customer__country__name__contains=\'Germany\').annotate(count = Count(\'customer\')).count()\nRun Code Online (Sandbox Code Playgroud)\n\n它有点有效,但我必须手动创建与国家/地区一样多的查询。是否有可能循环所有国家并提取此信息?
\n您可以在此处简单地使用 group by (根据问题中的模型):
from django.db.models import Count
Order.objects.values('seller__country__name').annotate(count=Count('seller')).values('seller__country__name','count')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1465 次 |
| 最近记录: |