python - Django 使用 Django 查询集获取所有后代子模型

标签 python django

我有 self 引用的用户模型。现在我需要获取给定用户的所有 child 。

class MyUser(AbstractBaseUser, PermissionsMixin):
      .....
      parent = models.ForeignKey('self', blank=True, null=True, related_name ='children')

用户A有子用户B

用户B有子用户C

用户 C 有子用户 D

所以如果我有给定的用户 A 那么我想得到

用户 B、C、D 作为结果

如何使用 Django 查询来做到这一点??

最佳答案

聚会有点晚了,但我遇到了同样的问题。 Selcuk 的回答引发了一个 AttributeError,我写了一个改进的函数(但对他们表示敬意)。对于我的用例,我还需要一种方法来找到所有父级,并且我通过在我的 clean 方法中禁止循环关系来确保避免无限循环。

from django.core.exceptions import ValidationError

class MyUser(AbstractBaseUser, PermissionsMixin):
    parent = models.ForeignKey('self', blank=True, null=True, 
                related_name="children")

    def get_all_children(self):
        children = [self]
        try:
            child_list = self.children.all()
        except AttributeError:
            return children
        for child in child_list:
            children.extend(child.get_all_children())
        return children

    def get_all_parents(self):
        parents = [self]
        if self.parent is not None:
            parent = self.parent
            parents.extend(parent.get_all_parents())
        return parents

    def clean(self):
        if self.parent in self.get_all_children():
            raise ValidationError("A user cannot have itself \
                    or one of its' children as parent.")

关于python - Django 使用 Django 查询集获取所有后代子模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35617839/

相关文章:

python - 单选按钮初始化,未选择任何选项

python - Graphite statsd xaxis 每 2 秒

Django:如何建立与rabbitmq的持久连接?

python - 在 OSX 上开始 Django/Python/MySQL 的类(class)(来自 OSX 新手)

python - 使用 boto 将文件从 ec2 传输到 s3 时出错

python - 如何解决 xml.etree.ElementTree.iterparse() 中的 Unicode 错误?

python - cv2.VideoWriter_fourcc 的反义词是什么?

python将大文件发布到django

django - 同一代码库的多个docker撰写环境

python - 处理可能为 None 的变量