python - Django Query:按外键的外键对订单进行分组/计数?
问题描述
我很难弄清楚如何实现这一目标。我有 3 个相当简单的模型:
class Country(models.Model):
name = models.CharField(max_length=200, null=True, blank=True)
def __str__(self):
return self.name
class Seller(models.Model):
name = models.CharField(max_length=200, null=True, blank=True)
country = models.ForeignKey(Country, null=True, blank=True, on_delete=models.SET_NULL)
def __str__(self):
return self.name
class Order(models.Model):
order = models.PositiveIntegerField(null=True, blank=True)
seller = models.ForeignKey(Seller, null=True, blank=True, on_delete=models.SET_NULL)
order_date = models.DateField(max_length=200, null=True, blank=True)
def __str__(self):
return self.name
“订单”是“卖家”下的简单产品订单,是我们供应的企业,“国家”定义了这些卖家所在的国家/地区。可能的情况是,在一个国家我们有很多卖家,而在下一个国家我们只有 1 个。
为了更好地理解我的问题,对订单的简化描述:
Order N° 1 by seller A from Germany
Order N° 2 by seller B from Germany
Order N° 3 by seller C from France
Order N° 4 by seller D from Spain
Order N° 5 by seller F from France
我想要实现的是对来自该模型中存在的国家的所有订单进行分组。例如:(
Country | Count of all orders by country
{Germany : 7
Spain : 12
France : 5}
我尝试过这样的事情:
Order.objects.filter(customer__country__name__contains='Germany').annotate(count = Count('customer')).count()
它有点工作,但我必须手动创建与国家一样多的查询。是否有可能遍历所有国家并提取此信息?
解决方案
您可以在这里简单地使用 group by (根据问题中的模型):
from django.db.models import Count
Order.objects.values('seller__country__name').annotate(count=Count('seller')).values('seller__country__name','count')
推荐阅读
- java - 文件已上传但未在 Firebase 实时数据库中显示 - Android Studio
- powerbi - 如何根据时间段更改我的计算
- node.js - 在 .env 文件中使用插值
- html - 如何在 Visual Composer 中使用选项卡标题部分中的图像创建可切换选项卡?
- php - 在 Wordpress 上提交表单后重定向到 Homeurl
- python - 使用python在多个空格上拆分字符串
- xml - 如何在不影响整个站点的情况下继承和修改 Odoo 中特定页面的“website.layout”模板?
- html - 如何解决:函数()未在 HTMLAnchorElement.onclick 中定义
- jquery - 我需要帮助创建适当的本地存储以正确记住相当复杂的切换状态
- reactjs - React-Router 的 Redirect 在我使用时会引发 webpack 错误