带有预取的Django查询集?

时间:2018-02-19 23:45:19

标签: python django

我有这样的模特

class Category(models.Model):
    name = models.CharField()
    …
class Product(models.Model):
    category = models.ForeignKey(Category, verbose_name=‘cat’)
    name = models.CharField()
    price = models.IntegerField()

我需要创建queryset,它将选择价格> = 100按类别分组的所有产品。之后我需要计算每个类别的产品数量。

我做了

categories = Category.objects.filter(product__price__gte = 100) 

此查询集为我提供了所有类别,其中包含价格> = 100的产品。但我如何才能获得产品数量和产品数量?也许我需要使用prefetch_related,但我不知道如何。

1 个答案:

答案 0 :(得分:1)

您可以使用来自Count的条件聚合django来实现此目的。

categories = Category.objects.filter(product__price__gte = 100).\
annotate(count_of_products=Count('products', filter=Q(product__price__gte = 100)))