Django MTPP在REST API中显示递归分层类别

时间:2018-02-07 09:41:58

标签: python django api recursion hierarchy

我试图在我的Django REST API列表视图中显示我的递归类别模型。 现在就是这样:

"results": [
    {
        "pk": 3,
        "title": "Test",
        "category": 7,
    },
    ...
]}

我想实现这样的目标:

"results": [
    {
        "pk": 3,
        "title": "Test",
        "category": [
            {
               "id": 5,
               "name": "Cat",
               "slug": "cat",
               "child": [
                   {
                       "id": 7,
                       "name": "Parser",
                       "slug": "parser",
                   }
               ]
            }
        ],
    },
    ...
]}

我目前正在使用Django MPTT来创建分层模型。这是models.py中的类别:

class Category(MPTTModel):
    name = models.CharField(max_length=50, unique=True)
    parent = TreeForeignKey('self', null=True, blank=True, related_name='children', db_index=True, on_delete=models.SET_NULL)
    slug = models.SlugField()

    class MPTTMeta:
        order_insertion_by = ['name']

    class Meta:
        unique_together = (('parent', 'slug',))
        verbose_name = "Category"
        verbose_name_plural = "Categories"

    def get_slug_list(self):
        try:
             ancestors = self.get_ancestors(include_self=True)
        except:
             ancestors = []
        else:
             ancestors = [i.slug for i in ancestors]
        slugs = []
        for i in range(len(ancestors)):
            slugs.append('/'.join(ancestors[:i + 1]))
        return slugs

    def __str__(self):
        return self.name

我正在使用Django Rest Framework的通用视图来创建视图。在views.py中:

class CaseListCreateView(generics.ListCreateAPIView):
    serializer_class = CaseSerializer

    def get_queryset(self):
        qs = Case.objects.filter(active=True)

        query = self.request.GET.get("search")
        if query is not None:
            qs = qs.filter(Q(title__contains=query) | Q(text__contains=query)).distinct()

        return qs

    def perform_create(self, serializer):
        serializer.save(user=self.request.user)

我已尝试using djangorestframework-recursive进行递归但没有运气。

任何帮助都会受到极大的关注! 感谢

0 个答案:

没有答案