我正在为这个问题寻找一个"pythonic“/ "orm-ic”的解决方案……
Model Soldier本身有一个ManyToManyField。
class Soldier(models.Model):
...
subordinates = models.ManyToManyField('Soldier', ...)A、B和C都是Soldier对象
它们形成了类似于“命令链”的形式:A>B>C
B在A.subordinates.all()中
C在B.subordinates.all()中
获得A所有下属的最好方法是什么
像A.get_all_subordinates()这样的东西,应该返回[B, C]。
我们不知道在运行时这种关系有多少个级别。(C可以有自己的一些下属,B可以有兄弟姐妹,等等)
发布于 2011-03-20 07:01:47
如果你用多对多关系对上级<->下级关系建模,你最终会得到一个类似于图的结构,它可以得到任意复杂的(例如循环关系)。这将变得非常难以有效地查询。
如果您想要一个树状结构(这意味着每个Soldier最多只有一个直接上级),那么可以使用django-mptt
from django.db import models
from mptt.models import MPTTModel
class Soldier(MPTTModel):
parent = models.ForeignKey('self', null=True, blank=True)然后,获得所有的下属就像
subordinates = soldier.get_descendants()get_descendants最好的一点是:它只导致一个查询得到所有子代。
https://stackoverflow.com/questions/5365459
复制相似问题