0

我已经玩了几个小时没有找到解决方案。

我有以下型号:

class Category(models.Model):
    name = models.CharField(max_length=100)

class Item(models.Model):
    name = models.CharField(max_length=250)
    category = models.ForeignKey(Category)

然后我过滤项目和与该项目相关的类别:

items = Item.objects.filter(name=name)
categories = Category.filter(id__in = items.values_list('category__id'))

现在我想获取具有类别的项目的数量并将该数字保存在类别中的字段中annotate

我该怎么做?

4

2 回答 2

0

然后我过滤项目和与该项目相关的类别。

如果每个项目可以指向几个类别,我认为您需要 ManyToMany 字段。

现在我想获取具有类别的项目数

category = Category.objects.filter(name=name)
num_items = Item.objects.filter(category=category).count()
于 2017-04-22T12:48:44.600 回答
0

试试下面的代码

from django.db.models import Count

items = Item.objects.filter(name=name)
categories = Category.objects.filter(
    id__in=items.values_list('category_id')
).annotate(items_count=Count("item"))

for cat in categories:
    print cat.name, cat.items_count

供参考:https ://docs.djangoproject.com/en/1.11/topics/db/aggregation/

于 2017-04-22T05:43:23.567 回答