有我的模特:
class Category(models.Model):
.....
slug = models.SlugField(verbose_name=_('Slug'))
description = RedactorField(verbose_name=_('Description'))
parent = models.ForeignKey('self', null=True, blank=True,
default=None, verbose_name=_('Parent'))
问题是我需要使用DjangoRestFramework创建api资源,并且序列化程序应包含每个类别的子项数。 像这样的东西,我使用收件箱DRF工具,如generics.ListAPIView:
[
{
"id": 1,
"created": "01-08-2017 10:42 UTC",
"modified": "01-08-2017 10:55 UTC",
"name": "Category_1",
"slug": "",
"description": "",
"parent": null,
"child_count": 12,
},
{
"id": 2,
"created": "01-08-2017 10:42 UTC",
"modified": "01-08-2017 10:55 UTC",
"name": "SubCategory_1_1",
"slug": "",
"description": "",
"parent": 1,
"child_count": 0,
},
...
]
所以查询集
Category.objects.annotate(child_count=models.Count('parent'))
只显示父母的数量(并且总是等于1或0)。
有MPTTModel lib,可能可以解决这个问题,但我无法使用它,因为存在一些项目特定问题。
答案 0 :(得分:0)
这应该有效:
Category.objects.annotate(child_count=Count('category_set'))
'category_set'
是django自动生成以在反向关系中使用它的名称,您应该将related_name='children'
添加到parent
字段,然后您可以使用Count('children')
。