Django查询:通过外键的外键分组/计数订单?

前往尼古拉:

我很难解决这个问题。我有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()

这有点奏效,但我必须手动创建与国家/地区一样多的查询。是否有可能遍历所有国家并提取此信息?

ruddra:

您可以在此处简单地使用group by(根据问题中的模型):

from django.db.models import Count
Order.objects.values('seller__country__name').annotate(count=Count('seller')).values('seller__country__name','count') 

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章