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对象时超过了最大递归深度