2012-09-11 4 views
3

J'utilise django-mptt pour un modèle d'article dans mon application Django. Si je veux obtenir tous les articles qui sont mis à par exemple caché, je pouvais fairedjango-mptt filtre sans casser l'arbre

Article.objects.filter(hidden=False) 

mais ce serait briser le MPTT arbre. Comment puis-je filtrer sur mon jeu de requête de manière à exclure non seulement tous les articles cachés, mais aussi les fils de ces nœuds et ainsi maintenir l'intégrité de l'arborescence pour que je puisse toujours utiliser la balise template tree_info?

+0

En quoi cette requête "brise-t-elle" l'arbre? –

+0

Eh bien, en faisant cela, un nœud pourrait perdre son parent. : o – Triplr

Répondre

1

J'ai un problème similaire. Je voudrais supprimer un noeud et tous ses enfants.

Voici comment je parviens à faire:

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) 
0

Il y a une solution plus simple: il suffit de mettre tous les enfants cachés ainsi.

Questions connexes