让我说我有这个课程(简化):
class Tag (...):
children = models.ManyToManyField(null=True, symmetrical=False)
现在我已经实现了get_parents,get_all_ancestors函数。只有顶级标签有一种不错的pythonic方式吗?如果我设计的标签不同(指向父母),我只会get_all_parents().filter(children=None)
。
我的第一个想法是创建一个新的函数,它将递归遍历所有父项并保存那些没有的函数。
但是,过滤器或查询对象是否有可能做同样的事情(用较少的代码行)?
感谢您的帮助。
[编辑] 的
完成后,它应该是一个分层标记系统。每个标签都可以有子女,父母,但只保存孩子。我希望得到所有顶级标签,通过许多儿童/儿童的孩子到我的标签。
答案 0 :(得分:0)
由于你有symmetrical=False
,我认为这应该可以让所有标签都没有父母:
Tag.objects.filter(tag_set=None)
我必须说,ManyToMany关系对于分层系统来说并不理想。通常,一个元素只能有一个父元素但只有多个子元素 - 即它是从子元素到父元素的ForeignKey。你拥有它的方式,每个元素可以有多个父和多个子元素,所以我看不出层次关系是如何可能的。
与往常一样,我建议使用django-mptt来管理分层数据。