Django自递归外键过滤器查询所有子项

2024-01-08

我有一个带有自引用外键关系的模型:

class Person(TimeStampedModel):
    name = models.CharField(max_length=32)
    parent = models.ForeignKey('self', null=True, blank=True, related_name='children')

现在我想获得一个人的所有多级孩子。如何为其编写 Django 查询?它需要表现得像递归函数。


您始终可以向模型添加递归函数:

编辑:根据 SeomGi Han 更正

def get_all_children(self, include_self=True):
    r = []
    if include_self:
        r.append(self)
    for c in Person.objects.filter(parent=self):
        _r = c.get_all_children(include_self=True)
        if 0 < len(_r):
            r.extend(_r)
    return r

(如果您有大量递归或数据,请不要使用此...)

仍然按照 errx 的建议推荐 mptt。

编辑:2021 年,因为这个答案仍然受到关注:/

Use Django 树查询 https://github.com/matthiask/django-tree-queries反而!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django自递归外键过滤器查询所有子项 的相关文章

随机推荐