2012-05-10 5 views
1

2つのモデルの記事とタクソノミを設定しました。 分類はMPTTModelサブクラスです。Django admin + MPTT:親ノードをフィルタリングするときに子供を表示する方法は?

1つのこと以外はすべて正常に動作しています。リンクされているアーティクルのない親ノードを選択すると、子ノードにリンクされたアーティクルは表示されません。

私は自分のカスタムフィルタをコーディングしようとしていますが、クエリーセットのフィルタリングに悩まされています。子ノードにリンクされているすべての記事を表示するには、このクエリセットをフィルタリングできますかノード親ノードをクリックするとどうなりますか? :それはしかし、ここで同じ問題に直面して誰のための「作業ではなく、防弾」され、私たち自身の質問に答えるために大丈夫だ場合

class TaxonomyFilter(SimpleListFilter): 
    """ 
    Return incremented taxonomy list. Filtering by parent node display all children. 
    """ 
    title = ('Index') 
    parameter_name = 'node_id' 

    def lookups(self, request, model_admin): 
     taxos = Taxonomy.objects.all() 
     leafs = [] 
     for taxo in taxos: 
      leafs.append((taxo.id,(taxo.name))) 

     return leafs 


    def queryset(self,request,queryset): 
     """ 
     Filter list by displaying children if parent node has any. 
     """ 
     if self.value(): 
      return queryset.filter() 
     else: 
      return queryset 

答えて

1

ジュリアススニペット:これは少し低くなっていますレベルの、しかしcraigdsによって記載されているようにクエリは、左右の葉のように、動作しないかもしれないいくつかの例があるdjango-mptt

def queryset(self, request, queryset): 
    """ 
    Filter list by displaying children if parent node has any. 
    """ 
    t = Taxonomy.objects.get(pk=self.value()) 

    return queryset.filter(taxonomy__lft__gte=t.lft, taxonomy__rght__lte=t.rght) 
+0

ニース: あなたがdjango-mpttが付属していますtree_idフィールドを使用することができます偽の一致を避けるために!アイデアありがとう – Matthieu

2

わからないが

def queryset(self,request,queryset): 
    """ 
    Filter list by displaying children if parent node has any. 
    """ 
    descendants = Taxonomy.objects.get(pk=self.value()).get_descendants(include_self=True) 

    descendant_list = [] 
    for descendant in descendants: 
     descendant_list.append(descendant.id) 

    return queryset.filter(taxonomy__in=descendant_list) 
1

(2ではなく3)あなたのソリューションよりも少ないクエリをん属性はどのような形でもユニークではありません。

t = Taxonomy.objects.get(pk=self.value()) 

return queryset.filter(
    taxonomy__tree_id=t.tree_id, 
    taxonomy__lft__gte=t.lft, 
    taxonomy__rght__lte=t.rght 
) 
関連する問題