Python/Django递归模型到树结构dict
我有一个Django模型Python/Django递归模型到树结构dict,python,django,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) 我想创建递归的返回树结构dict
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)
我想创建递归的返回树结构dict
e、 g
我认为您需要将您的
ForeignKey
关系更改为self
,以便引用自身。此外,为了实现的简单性,让我们添加相关的_name='children'
(),并使其可为null(null=True
),以将其表示为根节点
然后我们可以执行以下实现:
from django.forms.models import model_to_dict
def 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 tree
final_tree = list()
for category in Category.objects.filter(parent__isnull=True):
final_tree.append(get_tree(category))
print(final_tree)
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_dict
def 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 tree
final_tree = list()
for category in Category.objects.filter(parent__isnull=True):
final_tree.append(get_tree(category))
print(final_tree)