django mptt在不破坏树的情况下过滤
我在django应用程序中使用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
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