在django模型中制作树形结构?

sfe*_*ell 8 python django activerecord django-models

我想拥有一个包含2个字段的模型,包括子项和父项.我怎么在django做这个?我有类似的东西

from django.db import models
class FooModel(models.Model)
    parent = models.ForeignKey('self', blank=True, null=True)
    children = models.ManyToOneRel('self', blank=True, null=True)

    def __init__(self, *args, **kwargs):
        super(FooModel, self).__init__(*args, **kwargs)
        self.parent.children.add(self)
Run Code Online (Sandbox Code Playgroud)

但我不认为我应该像这样使用ManyToOneRel(特别是因为它在'空白'上给了我一个关键字错误).有什么建议?

Dan*_*man 21

ManyToOneRel 是一个内部实现类,它不适用于您的模型.

但是你觉得为什么还需要呢?正如文档中详细解释的那样,当您定义ForeignKey时,您会自动获得反向关系.因此,在您的情况下,如果您定义,parent那么您self.foomodel_set已经自动获得:并且您可以通过使用related_name参数使其更加明确:

parent = models.ForeignKey('self', blank=True, null=True, related_name='children')
Run Code Online (Sandbox Code Playgroud)

请注意,如果您计划使用树进行复杂的操作,则可能需要使用django-mptt库.