1 回答

TA贡献1811条经验 获得超6个赞
我认为您需要将您的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_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)
添加回答
举报