我有一个定义为的模型:
Model A:
parent = ForeignKey('self')
Model B:
a = ForeignKey(A)
假设我有一些未定义的A级数据。
A1
|->A2
|->A4->B1s
|->A5->B2s
|->A3->B3s
...
如果我有A中的一个,我怎样才能让所有B都与之相关。
例如,给定A2,如何获得B1和B2。
如何从A1获得B1s,B2s,B3。
答案 0 :(得分:1)
您正在寻找的数据结构称为" Tree" Django几乎没有很好的实现:django mptt和django treebeard。
准确回答您的问题:
给定A2,如何获得B1和B2。 >
B.objects.filter(Q(a__a=a2))
如何从A1获得B1s,B2s,B3 ..>
B.objects.filter(Q(a__a__a=a1) | Q(a__a=a1))
您甚至可以使用递归将简单(愚蠢)方法添加到模型中:
def get_all_children(self):
result = []
for child in B.objects.filter(a=self):
result.append(child.get_all_children())
return result
Django orm没有来自框的递归查询,我强烈建议使用django mptt或treebeard。