簡體   English   中英

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()

但是,這可能不是您想要的:請發布與您的模型相關的代碼。

編輯。

我從代碼中收集到的是,您使用自定義類BlogPostTag標記了博客文章,該類繼承了TaggedItemBase (一個抽象類,如下所示)

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

我無法測試它,因為代碼不足,但是我認為您可以通過執行以下操作來獲取博客文章中的所有標簽:

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

讓我們發布! 謝謝 :-)

對於尋找該問題答案的其他人,我發現了一個簡單的解決方法:

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

此列表按最常用到最不常用的順序列出了與BlogPost模型關聯的所有標簽。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM