Wagtail/Django Taggit - 每组子页面的唯一标签池

问题描述 投票:0回答:1

举例来说,假设我们想要创建多个博客,但在同一个应用程序中。每个博客都有属于每个相应博客的子级的博客文章。是否可以设置 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)

提前致谢!

django wagtail django-taggit
1个回答
0
投票

这就是它在我的网站上的工作方式 - 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)
    ....

在技术博客页面中创建的标签仅在技术博客页面上可用,而在个人博客页面上不可用,反之亦然。

© www.soinside.com 2019 - 2024. All rights reserved.