Django теги-теги, как получить набор запросов топ-тегов? - PullRequest
1 голос
/ 16 июня 2011

Я хочу написать функцию менеджера для класса, которая возвращает связанные теги для модели и присваивает значение счетчика каждому тегу.

Например:

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

1 Ответ

0 голосов
/ 16 июня 2011

Итак, я нашел способ сделать это.

По сути, я полностью игнорирую данные представления и использую теги шаблона 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>

Хотя это кажется глупым способом сделать это, хотя конечный результат - то, чего я хочу.

Есть ли способ сделать это через менеджер и просмотр?Я думаю, что это то, для чего предназначено упражнение.

...