簡體   English   中英

Django 查詢:按外鍵的外鍵對訂單進行分組/計數?

[英]Django Query: Group/Count orders by foreign key of foreign key?

我很難弄清楚如何實現這一目標。 我有 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

我想要實現的是對來自 Model 中存在的國家/地區的所有訂單進行分組。 例如:(

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') 

你可以簡單地包裝你的國家。 像這樣

for country in Country.objects.all():
    contains = {'customer__country__name__contains': country.name}
    Order.objects.filter(**contains).annotate(count = Count('customer')).count()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM