我有一个具有自引用外键关系的模型:
class Person(TimeStampedModel):
name = models.CharField(max_length=32)
parent = models.ForeignKey('self', null=True, blank=True, related_name='children')
现在我想要为一个人得到所有的多层次的子元素.我如何为它编写一个Django查询?它需要像递归函数一样工作.
我有一个具有自引用外键关系的模型:
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,因为这个答案仍然受到关注:/