Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
django mptt在不破坏树的情况下过滤_Django_Model_Filter_Tree_Mptt - Fatal编程技术网

django mptt在不破坏树的情况下过滤

django mptt在不破坏树的情况下过滤,django,model,filter,tree,mptt,Django,Model,Filter,Tree,Mptt,我在django应用程序中使用django mptt作为文章模型。如果我想得到所有的文章,例如设置为隐藏,我可以这样做 Article.objects.filter(hidden=False) 但这将打破mptt树。我如何在我的queryset上进行过滤,这样不仅可以排除所有隐藏的文章,还可以排除那些节点的子节点,这样可以保持树的完整性,以便我仍然可以使用树信息模板标记?我也遇到了类似的问题。我想删除一个节点及其所有子节点 以下是我如何做到这一点的: class FolderForm(form

我在django应用程序中使用django mptt作为文章模型。如果我想得到所有的文章,例如设置为隐藏,我可以这样做

Article.objects.filter(hidden=False)

但这将打破mptt树。我如何在我的queryset上进行过滤,这样不仅可以排除所有隐藏的文章,还可以排除那些节点的子节点,这样可以保持树的完整性,以便我仍然可以使用树信息模板标记?

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

以下是我如何做到这一点的:

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)

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

该查询以何种方式“破坏”树?如果这样做,节点可能会丢失其父节点:o