首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >深度关系搜索

深度关系搜索
EN

Stack Overflow用户
提问于 2011-03-20 06:49:38
回答 1查看 112关注 0票数 1

我正在为这个问题寻找一个"pythonic“/ "orm-ic”的解决方案……

Model Soldier本身有一个ManyToManyField。

代码语言:javascript
复制
class Soldier(models.Model):
    ...
    subordinates = models.ManyToManyField('Soldier', ...)

ABC都是Soldier对象

它们形成了类似于“命令链”的形式:A>B>C

BA.subordinates.all()

CB.subordinates.all()

获得A所有下属的最好方法是什么

A.get_all_subordinates()这样的东西,应该返回[B, C]

我们不知道在运行时这种关系有多少个级别。(C可以有自己的一些下属,B可以有兄弟姐妹,等等)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-20 07:01:47

如果你用多对多关系对上级<->下级关系建模,你最终会得到一个类似于图的结构,它可以得到任意复杂的(例如循环关系)。这将变得非常难以有效地查询。

如果您想要一个树状结构(这意味着每个Soldier最多只有一个直接上级),那么可以使用django-mptt

代码语言:javascript
复制
from django.db import models
from mptt.models import MPTTModel

class Soldier(MPTTModel):
    parent = models.ForeignKey('self', null=True, blank=True)

然后,获得所有的下属就像

代码语言:javascript
复制
subordinates = soldier.get_descendants()

get_descendants最好的一点是:它只导致一个查询得到所有子代。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5365459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档