2017-03-08 30 views
1

我有一个用户模型类定义如下的父母: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') 

我想检索CustomUser的所有line_managers。 让我们假设我有:

A 
-B 
-C 

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

+0

[Django self-recursive foreignkey filter query for all childs]可能重复(http://stackoverflow.com/questions/4725343/django-self-recursive-foreignkey-filter-query-for-all-childs) –

+0

我看到那篇文章,但我想知道是否有一种更清洁,更高效的方法(即直接进行查询)来实现相同的结果 – AntoG

+0

好吧,让我们拭目以待,看看有人提出了更好的解决方案。 –

回答

0

我没有测试过这一点,但它应该工作:

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() 

希望它能帮助。

+0

它就像一个魅力!非常感谢,这正是我正在寻找的 – AntoG

+0

我怎么能写一个类似的功能做相反的事情,即检索CustomUser的所有后代(不仅是直接的孩子)? – AntoG