[英]Getting all the tags associated with the parent object using 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.