【问题标题】:Django - Models - Recursively retrieve parents of a leaf nodeDjango - 模型 - 递归检索叶节点的父节点
【发布时间】:2017-07-29 07:14:01
【问题描述】:

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

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 中我该怎么做?

【问题讨论】:

标签: python django


【解决方案1】:

我没有对此进行测试,但它应该可以工作:

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: RecursionError: maximum recursion depth exceeded while calling a Python object
猜你喜欢
  • 2011-11-12
  • 1970-01-01
  • 2017-05-04
  • 1970-01-01
  • 2011-11-12
  • 1970-01-01
  • 2013-08-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多