【问题标题】:Django-Taggit | Getting ALL tags, but only related to blogDjango-Taggit |获取所有标签,但仅与博客相关
【发布时间】:2017-11-22 12:01:38
【问题描述】:

我正在使用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...

【问题讨论】:

    标签: python django tags django-taggit


    【解决方案1】:

    如果标签直接放在您的 Blog 对象上(我将在此处调用 myBlog)并且您想要获取所有标签,您可以这样做:

    myBlog.tags.all()
    

    但是,这可能不是您想要的:请发布与您的模型相关的代码。

    编辑。

    我从代码中收集到的是,您使用继承 TaggedItemBase 的自定义类 BlogPostTag 标记您的博客文章,这是一个类似于 this 的抽象类:

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

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

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

    随时通知我们!谢谢你:-)

    【讨论】:

    • 您好,谢谢您的评论。我将编辑我的帖子以包含一些模型,但我的标签与BlogPost 模型相关联,而不是BlogIndex
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-05
      • 2018-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-22
      • 2011-09-10
      相关资源
      最近更新 更多