【问题标题】:Django Annotations For Group By Through Another Model通过另一个模型进行分组的 Django 注释
【发布时间】:2011-05-05 15:47:45
【问题描述】:

我很难弄清楚如何在 Django ORM 中使用注释来通过模型实现分组。

from django.db import models

class Customer(models.Model):
    name = models.CharField(max_length=255)

class Store(models.Model):
    name = models.CharField(max_length=255)

class Order(models.Model):
    customer = models.ForeignKey(Customer)
    store = models.ForeignKey(Store)
    order_date = models.DateTimeField()

如果我的店铺位于洛杉矶、丹佛、休斯顿和亚特兰大,我如何计算 使用最新订单日期按商店划分的客户?

Los Angeles: 25
Denver: 210
Houston: 400
Atlanta: 6

【问题讨论】:

    标签: python django orm annotations group-by


    【解决方案1】:

    CustomerStore 上定义一个ManyToMany 字段,指向另一个模型,Order 作为through 表。例如:

    class Store(models.Model):
        name = models.CharField(max_length=255)
        orders = models.ManyToManyField(Customer, through=Order)
    

    现在你可以这样做了:

    from django.db.models import Count
    Store.objects.annotate(Count("orders__customer"))
    

    【讨论】:

    • 这如何确保它只是用于查询的最新 order_date?
    • latest order_date 表示单个订单 - 这是您的意思吗?
    • 是的..我只想统计最新的订单。如果你上周在丹佛购物,本周在休斯顿购物,我只想把你算在休斯顿。
    • 所以这个查询让我很生气。它不只计算最新的订单,而是计算所有订单。
    猜你喜欢
    • 2018-12-04
    • 2012-03-20
    • 2021-10-09
    • 1970-01-01
    • 2021-01-31
    • 1970-01-01
    • 1970-01-01
    • 2016-06-17
    • 2019-09-30
    相关资源
    最近更新 更多