django-mptt过滤器而不会破坏树

时间:2012-09-11 13:20:41

标签: django model filter tree mptt

我在Django应用程序中使用django-mptt作为文章模型。如果我想获取所有设置为隐藏的文章,我可以

Article.objects.filter(hidden=False)

但这会破坏mptt-tree。如何以这样的方式过滤我的查询集,不仅排除所有隐藏的文章,还排除这些节点的子节点,并保持树的完整性,以便我仍然可以使用tree_info模板标记?

2 个答案:

答案 0 :(得分:1)

我遇到了类似的问题。我想删除一个节点及其所有子节点。

以下是我设法做到的方法:

class FolderForm(forms.ModelForm):
    class Meta:
        model = Folder
        fields = ('name', 'parent')

    def __init__(self, *args, **kwargs)
        super(FolderForm, self).__init__(*args, **kwargs)

        if self.instance is not None:
            exclude_ids = [f.id for f in self.instance.get_descendants(
                include_self=True)]

            self.fields['parent'].queryset = self.fields['parent'].queryset \
                .exclude(pk__in=exclude_ids)

答案 1 :(得分:0)

有一个更简单的解决方案:只需将所有孩子都设置为隐藏。