【问题标题】:Django tagging-tags how to get queryset of top tags?Django tagging-tags 如何获取顶级标签的查询集?
【发布时间】:2011-06-15 21:59:52
【问题描述】:

我想为一个类编写一个管理器函数,它返回模型的关联标签并为每个标签分配一个计数值。

例如:

#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 章“展望未来”段落中的“挑战”。

【问题讨论】:

    标签: python django django-models count tagging


    【解决方案1】:

    所以这是我找到的一种方法。

    基本上我完全忽略了视图数据并使用 tagging-tags 模板标签直接访问模型内​​容。

    所以

    #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>
    

    尽管最终结果是我想要的,但这似乎是一种笨拙的方式。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-19
      • 1970-01-01
      • 2011-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-08
      相关资源
      最近更新 更多