2017-03-08 63 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