Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django-Models-递归检索叶节点的父节点_Python_Django - Fatal编程技术网

Python Django-Models-递归检索叶节点的父节点

Python Django-Models-递归检索叶节点的父节点,python,django,Python,Django,我有一个定义如下的用户模型类: class CustomUser(models.Model): user = models.OneToOneField(User) slug = models.SlugField(max_length=35, unique=True,help_text="URI dell'utente che appare sul browser") team = models.CharField(max_length=100, null=False, v

我有一个定义如下的用户模型类:

class CustomUser(models.Model):
    user = models.OneToOneField(User)
    slug = models.SlugField(max_length=35, unique=True,help_text="URI dell'utente che appare sul browser")
    team = models.CharField(max_length=100, null=False, verbose_name="Team")
    area = models.CharField(max_length=100, null=False, verbose_name="Area")
    line_manager = models.ForeignKey('self', null=True, blank=True,related_name='parent')
我想检索CustomUser的所有行管理器。 让我们假设我有:

A
-B 
 -C
其中C是叶,B和A是我想要检索的值。
在django我该怎么做?

我还没有测试过这个,但它应该可以工作:

class CustomUser(models.Model):
    user = models.OneToOneField(User)
    slug = models.SlugField(max_length=35, unique=True,help_text="URI dell'utente che appare sul browser")
    team = models.CharField(max_length=100, null=False, verbose_name="Team")
    area = models.CharField(max_length=100, null=False, verbose_name="Area")
    line_manager = models.ForeignKey('self', null=True, blank=True,related_name='parent')

    def get_linemanagers(self):
        if self.line_manager is None:
            return CustomUser.objects.none()
        return CustomUser.objects.filter(pk=self.line_manager.pk) | self.line_manager. get_linemanagers()

希望能有所帮助。

我看到了那篇文章的可能副本,但我想知道是否有一种更干净、更有效的方法(即直接进行查询)来实现相同的结果。好吧,让我们拭目以待,看看是否有人能想出更好的解决方案。它非常有效!非常感谢,这正是我想要的,我怎么能编写一个类似的函数来做相反的事情,那就是检索CustomUser的所有子代(不仅仅是直接子代)?我已经尝试过了,但我得到了一个递归错误:
RecursionError:调用Python对象时超过了最大递归深度