Как исправить неправильное num_times в django-taggit-templatetags?

У меня есть следующие модели

class Text(models.Model):
    text = models.CharField(max_length=10000, blank=True)
    tags = TaggableManager(blank=True)
    author = models.ForeignKey(User)
    date_created = models.DateTimeField(auto_now_add=True)
    last_modified = models.DateTimeField(auto_now=True) # changes on each edit
    public = models.BooleanField(default=1)

    def __unicode__(self):
        return self.text

class Note(models.Model):
    note = models.CharField(max_length=1000) 
    tags = TaggableManager(blank=True)
    text = models.ManyToManyField(Text)
    author = models.ForeignKey(User)
    date_created = models.DateTimeField(auto_now_add=True)
    last_modified = models.DateTimeField(auto_now=True) # changes on each edit
    public = models.BooleanField(default=1)

    def __unicode__(self):
        return u'%s' % (self.text.all())

Я использую django-taggit и django-taggit-templatetags. Когда я делаю вид следующим образом:

@staff_member_required #TODO disadvantage: redirects to admin page
def labels_all(request):
    return render_to_response('labels_all.html', locals(), context_instance=RequestContext(request))

с таким шаблоном

{% extends 'base.html' %}
{% load taggit_extras %}

{% block content %}

{% get_taglist as all_labels for 'notes' %}
<div class="tag-cloud">
<ul> 
{% for label in all_labels %}
<li>  
<a href="/labels/{{ label.slug }}"> 
    <font size={{label.weight|floatformat:0}}>
    {{ label|capfirst }} ({{ label.num_times }})
    </font>
</a>
</li> 
{% endfor %}
</ul> 
</div>    

Обе модели имеют TaggableManager. Я получаю неправильное значение num_times, когда составляю список тегов для любой из двух моделей. num_times, которые я получаю, — это количество раз, когда конкретный тег встречается в двух вышеуказанных моделях (например, 71). Мне нужно только количество раз, когда тег встречается в модели Note (50).

Я думаю, что проблема в строке 48 этого кода: https://github.com/feuervogel/django-taggit-templatetags/blob/master/taggit_templatetags/templatetags/taggit_extras.py

Он использует вызов taggit_taggeditem_items. Я не знаю, откуда это взялось. В базе у меня есть: taggit-tag (столбцы: id, name, slug) и taggit_taggeditem (id, tag_id, object_id, content_type_id). Я не знаю, откуда берется бит _items, но я думаю, что это из базового класса taggit models.py.

Может ли проблема быть в методе unicode (который использует текст в обеих моделях)?

Короче говоря, я хочу облако тегов или список тегов для конкретной модели. Как я могу использовать taggit и taggit-templatetags (или альтернативу) для расчета частоты тегов (num_times) для каждой модели?

Спасибо.


person Private    schedule 28.07.2013    source источник


Ответы (1)


Кажется, ваше приложение называется «заметки», а Text и Note — это модели внутри этого приложения.

Если вы хотите, чтобы в тексте модели использовались только теги, вы должны использовать:

{% get_taglist as all_labels for 'notes.Text' %}

Если вы хотите, чтобы в примечании к модели использовались только теги, вы должны использовать:

{% get_taglist as all_labels for 'notes.Note' %}
person Akshar Raaj    schedule 20.12.2013