2015-02-09 17 views
1

我喜歡在所有可用類別中下載包含類別=='download'的所有文件的下載列表。 (多對多場)帶有類別的下載列表ManyToManyField

>>>from feincms.module.medialibrary.models import MediaFile, Category 
>>>MediaFile.objects.filter(categories=1) #my download pk, these files I need 
>>>Category.objects.all() # these categories I need 

models.py:https://github.com/feincms/feincms/blob/master/feincms/module/medialibrary/models.py

則必須從混合:

{% for category in category %} 
<h1>{{ category }}</h1> 
    {% for file in category.mediafile_set.all %} 
     <li> {{ file }} </li> 
    {% endfor %} 
{% endfor %} 

但不是所有的文件,只有與該類別(或文件讓我們說標籤) '下載'。

和:

{% regroup file by categories.all as media_list %} 
<ul> 
{% for categories in media_list %} 
    <li>{{ categories.grouper }} 
    <ul> 
     {% for file in categories.list %} 
      <li>{{ file }}</li> 
     {% endfor %} 
    </ul> 
    </li> 
{% endfor %} 
</ul> 

這些文件都不錯,但類別不是在正確的位置和格式。

我需要一個像這樣的樹:

類別1 #下載類別,所有文件

  • 文件3
  • 文件1
  • 文件2

類別2

  • 文件3

3類

  • | _子類別3.1(如果chidren,下一個挑戰)
    • 文件2
  • 文件3

我views.py這樣的:

from feincms.module.medialibrary.models import MediaFile, Category 

def medialistview(request): 
    file = MediaFile.objects.filter(categories=1) 
    category = Category.objects.all() 
    return render_to_response('media.html',{ 
     'file': file, 'category': category, 
    },context_instance=RequestContext(request)) 

我是初學者,也許這是很容易...

回答

0

您可以使用自指涉template includes,然後只需通過categories變量作爲每個類別爲您遍歷當前兒童..

比方說是這樣的:category_tree.html

{% regroup file by categories.all as media_list %} 
<ul> 
{% for category in media_list %} 
    <li>{{ category.grouper }} 
    {% include "category_tree.html" with categories=category.children %} 
    <ul> 
     {% for file in category.list %} 
      <li>{{ file }}</li> 
     {% endfor %} 
    </ul> 
    </li> 
{% endfor %} 
</ul> 
相關問題