当前位置: 首页 > 面试题库 >

对所有子项的Django自递归外键过滤器查询

隗昀
2023-03-14
问题内容

我有一个带有自引用外键关系的模型

class Person(TimeStampedModel):
    name = models.CharField(max_length=32)
    parent = models.ForeignKey('self', null=True, blank=True, related_name='children')

现在,我想为一个人获得所有多层次的孩子。如何为它编写Django查询?它需要表现得像递归函数。


问题答案:

你可以随时向模型添加递归函数:

编辑:根据韩善基更正

def get_all_children(self, include_self=True):
    r = []
    if include_self:
        r.append(self)
    for c in Person.objects.filter(parent=self):
        _r = c.get_all_children(include_self=True)
        if 0 < len(_r):
            r.extend(_r)
    return r

(如果你有大量的递归或数据,请不要使用它。)

仍然建议errx建议的mptt。



 类似资料:
  • 问题内容: 我正在尝试根据的特定字段的值过滤Django中的表。 例如,我有两个模型: 我想根据相关项目的名称过滤我的资产列表。 目前,我正在执行两个查询: 我想知道是否有一种方法可以在主查询中指定这种过滤? 问题答案:

  • 问题内容: 我有以下Django模型: 我想知道是否有可能(无需直接编写SQL)生成一个查询集,其中包含所有Makes和每个人的相关。 问题答案: Django不支持反向外键查找的方法,因此,最好的方法是在不离开Python的情况下进行两个数据库查询。第一个是获取包含的所有内容,第二个是获取所有的内容。然后,你必须遍历并按需要排列数据。

  • 问题内容: 我有这样的Book模型: 简而言之: 我想检索作者严格等于给定作者集的书籍。我不确定是否有单个查询可以执行此操作,但是任何建议都会有所帮助。 总而言之: 这是我尝试过的((无法运行得到AttributeError) …这就是我得到的: 总的来说,我应该如何像在我的案例中那样在其ManyToMany字段包含一组给定对象的约束下查询模型? ps:我发现了一些相关的SO问题,但找不到清晰的答

  • 问题内容: 我正在尝试使用过滤查询集 我的问题是我不知道用户想提前搜索哪个字段,因此我需要用一个变量替换“名称”,如下所示 我怎么做? 问题答案: 差不多了.. 要了解它在做什么,请在Google周围搜索 :)了解Python中的kwargs 将字典键/值对扩展为关键字参数-值对。 使你的示例适应解决方案:

  • 本文向大家介绍Django 自定义过滤器,包括了Django 自定义过滤器的使用技巧和注意事项,需要的朋友参考一下 示例 过滤器允许您将函数应用于变量。此函数可以使用0或1参数。语法如下: 过滤器可以链接在一起,因此非常有效: 如果将其翻译成python,上面的代码行将给出以下内容: 在此示例中,我们将编写一个verbose_name适用于模型(实例或类)或QuerySet的自定义过滤器。它将返回