举例来说,假设我们想要创建多个博客,但在同一个应用程序中。每个博客都有属于每个相应博客的子级的博客文章。是否可以设置 Taggit,以便每个博客的标签池彼此保持独立。假设一个是美食博客,另一个是汽车博客,您不希望一个博客的自动完成建议出现在另一个博客上。
我尝试了 Wagtail 文档中的 “自定义标签模型”示例。没有运气。
我也尝试过关于 这个 stackoverflow 问题的建议。
这是上面 Wagtail 文档中的代码:
from django.db import models
from modelcluster.contrib.taggit import ClusterTaggableManager
from modelcluster.fields import ParentalKey
from taggit.models import TagBase, ItemBase
class BlogTag(TagBase):
class Meta:
verbose_name = "blog tag"
verbose_name_plural = "blog tags"
class TaggedBlog(ItemBase):
tag = models.ForeignKey(
BlogTag, related_name="tagged_blogs", on_delete=models.CASCADE
)
content_object = ParentalKey(
to='demo.BlogPage',
on_delete=models.CASCADE,
related_name='tagged_items'
)
class BlogPage(Page):
...
tags = ClusterTaggableManager(through='demo.TaggedBlog', blank=True)
提前致谢!
这就是它在我的网站上的工作方式 - 2 个博客页面类(
TechBlogDetailPage
和 PersonalBlogDetailPage
)都继承了基本博客页面类 (BlogDetailPage
)。每种类型都有一个标签类,它在 2 个博客页面类(不是继承模型)上创建父键。
# tags.py
from django.db import models
from modelcluster.models import ParentalKey
from taggit.models import TaggedItemBase
class TechBlogPageTag(TaggedItemBase):
content_object = ParentalKey(
'TechBlogDetailPage',
related_name='tagged_items',
on_delete=models.CASCADE,
)
class PersonalBlogPageTag(TaggedItemBase):
content_object = ParentalKey(
'PersonalBlogDetailPage',
related_name='tagged_items',
on_delete=models.CASCADE,
)
# models.py
from .tags import PersonalBlogPageTag, TechBlogPageTag
class TechBlogDetailPage(BlogDetailPage):
parent_page_types = ['blog.TechBlogListingPage']
....
tags = ClusterTaggableManager(through=TechBlogPageTag, blank=True)
....
class PersonalBlogDetailPage(BlogDetailPage):
parent_page_types = ['blog.PersonalBlogListingPage']
....
tags = ClusterTaggableManager(through=PersonalBlogPageTag, blank=True)
....
在技术博客页面中创建的标签仅在技术博客页面上可用,而在个人博客页面上不可用,反之亦然。