2011-06-15 53 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方式,虽然最终的结果是我想要的。

有没有办法通过经理和视图做到这一点?我认为这就是演习的目的。