Django-Taggit |获取所有标签,但仅与博客相关

Django-Taggit | Getting ALL tags, but only related to blog

我正在使用 django-taggit 标记三种不同类型的模型:

一切正常。

我现在正在尝试获取与博客所有可用标签相关的列表,以便我可以在 BlogIndex 上显示它们页。由于类似的 SO 问题,我得到的最远的是:

from taggit.models import Tag

def blog_tags(self):
    tags = Tag.objects.all()
    return tags

然而,这给了我每个标签的列表,包括产品和事件标签。

如何将标签列表过滤到博客?

编辑 | modely.py 简化:

class BlogPostTag(TaggedItemBase):
    content_object = ParentalKey('BlogPost', related_name='tagged_items')

class BlogPost(Page):
    # my fields
    tags = ClusterTaggableManager(through=BlogPostTag, blank=True)

    # Getting BlogPost-specific tags here is not difficult

class BlogIndex(Page):
    # my fields

    def blog_tags(self):
        etc...

如果标签直接放在您的 Blog 对象上(我将在此处调用 myBlog)并且您想获取所有这些标签,您可以执行以下操作:

myBlog.tags.all()

但是,这可能不是您要查找的内容:请执行 post 与您的模型相关的代码。

编辑。

我从代码中收集到的是,您使用继承 TaggedItemBase 的自定义 class BlogPostTag 标记您的博客 post,抽象 class 看起来像 this :

class TaggedItemBase(ItemBase):
      tag = models.ForeignKey(Tag, 
        related_name="%(app_label)s_%(class)s_items", on_delete=models.CASCADE)

我无法对其进行测试,因为没有足够的代码,但我认为您可以通过执行以下操作来获取博客 posts 上的所有标签:

  BlogPostTag.objects.all().values('tag')

让我们 posted!谢谢:-)

对于寻找此问题答案的其他人,我找到了一个简单的解决方法:

def blog_tags(self):
    tags = BlogPost.tags.most_common()
    return tags

这列出了与 BlogPost 模型关联的所有标签,按最常用到最不常用的顺序排列。