django休息框架类别父母和子女计数

时间:2017-08-01 12:50:04

标签: django django-rest-framework serializer

有我的模特:

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,可能可以解决这个问题,但我无法使用它,因为存在一些项目特定问题。

1 个答案:

答案 0 :(得分:0)

这应该有效: Category.objects.annotate(child_count=Count('category_set'))

'category_set'是django自动生成以在反向关系中使用它的名称,您应该将related_name='children'添加到parent字段,然后您可以使用Count('children')