假设我有这些模型:
class Category(MP_Node):
name = models.CharField(max_length=30)
class Item(models.Model):
category = models.ForeignKey(Category)
字符串
我想找到所有属于给定Category
的任何后代的Item
。
通常我会写category.item_set
,但这只是Item
s,属于层次结构的给定级别。
使用treebeard tutorial中的示例树,如果一个项目属于“Laptop Memory”,我如何找到属于后代“Computer Hardware”的所有项目,其中“Laptop Memory”是这些后代之一?
3条答案
按热度按时间u5rb5r591#
我只是遇到了同样的问题,并找到了如何做到这一点(考虑它在
ListView
的函数get_queryset
中):字符串
我想到的另一个选择是使用带有“OR”的过滤器:
型
4smxwvx52#
我查看了treebeard代码,以了解它如何获取节点的后代。我们可以应用与相关字段查找相同的过滤器。
字符串
我认为使用像get_descendants这样的中间调用将导致每个后代一个查询,并将所有后代加载到内存中。它首先挫败了使用treebeard的目的
我有兴趣看到一个自定义查找基于此代码,我不知道如何做到这一点…
8fq7wneg3#
例如,您可以在
views.py
中使用get_descendants()获取某个类别的所有后代,如下所示。* 你可以看到我的答案解释了如何使用get_descendants(include_self=True)
获取类别的所有后代,包括模型示例本身:字符串