Я пытаюсь получить теги, использованные в прошлом месяце, с количеством использованных раз (также в прошлом месяце) из django-taggit, чтобы создать облако тегов.Временной фильтр важен по эстетическим соображениям.
Глядя на модель django-taggit, выясняется, что она не включает какие-либо даты, поэтому мой подход состоял в том, чтобы отфильтровать мою модель (ссылку) по дате, изатем извлеките все теги, связанные с отфильтрованными ссылками.
# filter links submitted last month
last_month = datetime.today() - timedelta(days=30)
links_ids = Link.objects.filter(date__gte=last_month)
# retrieve TaggedItem objects related to those links
tagged_item = TaggedItem.objects.filter(object_id__in=links_ids)
# finally get Tag names related to TaggedItem
tag_ids = tagged_item.values_list('tag_id', flat=True) # get tags
tags = Tag.objects.filter(id__in=tag_ids).order_by('name')
# annotate by num_times
tags = tags.annotate(num_times=Count('taggit_taggeditem_items'))
return tags
При таком подходе я могу отфильтровывать только теги, использованные в прошлом месяце, но затем для вычисления num_times использовался вызов всей таблицы taggit_taggeditem,так что это дает мне num_times, используемые во ВСЕ ВРЕМЕНИ, теперь я могу получить ТОЛЬКО num_times, использованный в течение последнего месяца?