猿问

Python/Django递归模型到树结构字典

我有一个 Django 模型


class Category(models.Model):

    parent = models.ForeignKey('Category', null=False, blank=False)

    category_name = models.CharField(max_length=55,null=False, blank=False)

    status = model.BooleanField(default=True)

我想创建返回树结构字典的递归。


例如


[

    {

        'category_name': 'vehical',

        'id': 1,

        'children' : [

            {

                'category_name': 'cars',

                'id': 11,

                'children': [

                    {

                        'category_name': 'sport cars',

                        'id': 20

                    }               

                ]               

            }       

        ]

    }

]




>>> category = Category.objects.all()

>>> get_tree(category)


Cats萌萌
浏览 194回答 1
1回答

杨魅力

我认为您需要将您的ForeignKey关系更改为self, 以引用自身。此外,为了简化实现,让我们添加related_name='children'( doc ) 并将其设为 nullable( null=True) 以将其表示为根节点。class Category(models.Model):    parent = models.ForeignKey('self', null=True, blank=True, related_name='children')    category_name = models.CharField(max_length=55,null=False, blank=False)    status = models.BooleanField(default=True)然后我们可以做如下实现:from django.forms.models import model_to_dictdef get_tree(category):    tree = model_to_dict(category, fields=['category_name', 'status', 'id'])    if category.children.all().exists():       children = list()       for child in category.children.all():          children.append(get_tree(child))       tree['children'] = children    return treefinal_tree = list()for category in Category.objects.filter(parent__isnull=True):    final_tree.append(get_tree(category))print(final_tree)
随时随地看视频慕课网APP

相关分类

Python
我要回答