复杂的Django过滤器问题

时间:2010-04-15 20:58:09

标签: django django-models

让我说我有这个课程(简化):

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

现在我已经实现了get_parents,get_all_ancestors函数。只有顶级标签有一种不错的pythonic方式吗?如果我设计的标签不同(指向父母),我只会get_all_parents().filter(children=None)

我的第一个想法是创建一个新的函数,它将递归遍历所有父项并保存那些没有的函数。

但是,过滤器或查询对象是否有可能做同样的事情(用较少的代码行)?

感谢您的帮助。

[编辑]

完成后,它应该是一个分层标记系统。每个标签都可以有子女,父母,但只保存孩子。我希望得到所有顶级标签,通过许多儿童/儿童的孩子到我的标签。

1 个答案:

答案 0 :(得分:0)

由于你有symmetrical=False,我认为这应该可以让所有标签都没有父母:

Tag.objects.filter(tag_set=None)

我必须说,ManyToMany关系对于分层系统来说并不理想。通常,一个元素只能有一个父元素但只有多个子元素 - 即它是从子元素到父元素的ForeignKey。你拥有它的方式,每个元素可以有多个父多个子元素,所以我看不出层次关系是如何可能的。

与往常一样,我建议使用django-mptt来管理分层数据。