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

时间:2017-11-22 12:01:38

标签: python django tags django-taggit

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

2 个答案:

答案 0 :(得分:0)

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

myBlog.tags.all()

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

修改

我从代码中收集到的是,您使用自定义类BlogPostTag标记您的博客帖子,该类继承TaggedItemBase,这是一个类似于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')

让我们发布!谢谢: - )

答案 1 :(得分:0)

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

BlogPost

这列出了与DispatchQueue.main.async { self.collectionView?.reloadData() } 模型关联的所有标签,按照最常用的次序排列。