2010-04-15 62 views
0

可以说我有这个类(简体):复杂的Django过滤器的问题

class Tag (...): 
    children = models.ManyToManyField(null=True, symmetrical=False) 

现在我已经实现的功能get_parents,get_all_ancestors。有没有一个很好的pythonic方式来只是顶级标签?如果我设计了不同的标签(指向父母),我只需要制作get_all_parents().filter(children=None)

我的第一个想法是创建一个新的函数,将递归通过所有的父母,并保存那些没有。

但是有没有可能使用过滤器或查询对象来执行相同的操作(使用更少的代码行)?

感谢您的帮助。

[编辑]

当完成时,它应该是一个分层的标签系统。每个标签可以有孩子,父母,但只有孩子得救。我想获得所有顶级标签,这通过许多儿童/儿童孩子指向我的标签。

+0

你能举例说明你的数据输出应该是什么样子吗? – viksit 2010-04-15 21:03:38

+0

我的数据输出应该是一个标签列表,或者甚至更好的一个查询集。它们之间很容易转换,所以两者都适合我的情况。 – 2010-04-15 21:05:57

回答

0

既然你已经有了symmetrical=False,我想这应该让所有的标签,没有父母:

Tag.objects.filter(tag_set=None) 

我必须说的是一个多对多的关系是不理想的等级制度。通常情况下,一个元素只能有一个父元素但有多个子元素 - 即它是从子元素到父元素的ForeignKey。你有它的方式,每个元素可以有多个父母多个孩子,所以我不明白等级关系是可能的。

一如既往,我建议使用django-mptt来管理分层数据。

+0

啊thx,我忘了tag_set。 django-mptt不是我的选择,因为我想要多个父母。所以顶级父母可以像类别。 – 2010-04-15 21:57:58