2011-06-15 57 views
1

我想爲一個類編寫一個管理器函數,該函數返回模型的關聯標記併爲每個標記分配一個計數值。Django tagging-tags如何獲得頂級標記的查詢集?

例如:

#models.py 
class Snippet(models.Model): 
    ... 
    tags = TagField() 
    objects = managers.SnippetManager() 

-------------

#managers.py: 
from tagging.models import Tag 

class SnippetManager(models.Manager): 
    def top_tags(self, klass): 
     tag_list = Tag.objects.usage_for_model(klass, counts=True) 
return ??? 

--------------

#views.py: 
from django.views.generic.list_detail import object_list 
from calloway.models import Snippet 

def top_tags(request): 
    return object_list(request, queryset=Snippet.objects.top_tags(Snippet), 
         template_name='calloway/top_tags.html', 
         paginate_by=20) 

我想要top_tags管理器返回一個附加屬性排序的查詢集,以便我可以遍歷object_list並選取計數值。

即我的模板的樣子:

{% comment %} top_tags.html {% endcomment %} 
{% for thistag in object_list %} 
    <h2>Tag: {{ thistag.name }}</h2> 
    <p>Count: {{ thistag.count }}</p> 
    <p>Snippets:</p> 
    {% tagged_objects thistag in calloway.Snippet as tagged_snippets %} 
    {% for tagged_snippet in tagged_snippets %} 
     <p><a href="{{ tagged_snippet.get_absolute_url }}">{{ tagged_snippet.title }}</a></p> 
    {% endfor %} 
{% endfor %} 

誰能推薦一個辦法做到這一點?我如何將計數綁定到標籤?是「標註」解決方案嗎?

對於那些有興趣,我試圖完成實際的Django項目的「展望」段落中的「挑戰」,第8章

回答

0

所以這裏有一個方法我發現做到這一點。

基本上我完全忽略了視圖數據,並使用標記標記模板標記直接訪問模型內​​容。

所以

#managers.py 
class SnippetManager(models.Manager): 
def top_tags(self, klass): 
    return Tag.objects.all() 

然後......

{% comment %} top_tags.html {% endcomment %} 
{% load tagging_tags %} 

<html> 
    <head> 
     <title>Top Tags</title> 
</head> 
<body> 
    {% tags_for_model calloway.Snippet as snippet_tags with counts %} 
    {% regroup snippet_tags|dictsort:"count" by count as regrouped_snippet_tags %} 
    {% for group in regrouped_snippet_tags reversed %} 
     {% for thistag in group.list %} 
      <h2>Tag: {{ thistag.name }}</h2> 
      <p>Count: {{ group.grouper }}</p> 
      <p>Snippets:</p> 
      {% tagged_objects thistag in calloway.Snippet as tagged_snippets %} 
      {% for tagged_snippet in tagged_snippets %} 
       <p><a href="{{ tagged_snippet.get_absolute_url }}">{{ tagged_snippet.title }}</a></p> 
      {% endfor %} 
     {% endfor %} 
    {% endfor %} 
</body> 
</html> 

這似乎是雖然做這件事的cludgy方式,雖然最終的結果是我想要的。

有沒有辦法通過經理和視圖做到這一點?我認爲這就是演習的目的。