【问题标题】:How to apply aggregation to item of QuerySet with Django ORM如何使用 Django ORM 将聚合应用于 QuerySet 的项目
【发布时间】:2023-01-12 17:06:13
【问题描述】:

有很多与此类似的问题,但没有一个对我有用。

假设我有以下模型:

class Cafe(models.Model):
    name = models.CharField(max_length=150)

    def __str__(self):
        return self.name


class Food(models.Model):
    class SoldStatus(models.TextChoices):
        SOLD_OUT = "SoldOut", "Sold out"
        NOT_SOLD_OUT = "NotSoldOut", "Not sold out"

    name = models.CharField(max_length=50)
    cafe = models.ForeignKey(Cafe, related_name="foods", on_delete=models.CASCADE)
    status = models.CharField(choices=SoldStatus.choices)

    def __str__(self):
        return self.name

在我的 QuerySet 中,我想检索所有咖啡馆,每个咖啡馆都有以下字段:“咖啡馆名称”、“食物总数”、“未售出食物总数”和“未售出食物百分比”

有什么办法可以用 Django ORM 实现上述结果吗?

【问题讨论】:

    标签: python django django-models django-orm django-postgresql


    【解决方案1】:

    你可以这样尝试:

    Cafe.objects.annotate(
        total=Count('foods'), 
        sold=Count('foods', filter=Q(foods__status=Food.SoldStatus.SOLD_OUT)),
        unsold=sold=Count('foods', filter=Q(foods__status=Food.SoldStatus.NOT_SOLD_OUT))
    )
    

    更多信息可以在documentation找到。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-15
      • 2015-01-23
      • 2017-10-08
      • 2021-04-07
      • 2021-10-13
      • 1970-01-01
      • 2021-12-13
      相关资源
      最近更新 更多