如何将 wagtail 图像标签与页面标签分开?

How to seperate wagtail image's tags from page's tags?

假设我们有一个这样定义的鹡鸰页面:

class PostTag(TaggedItemBase):
    content_object = ParentalKey(
        'PostPage',
        related_name='tagged_items',
        on_delete=models.CASCADE
    )


class PostPage(Page):
    ...
    tags = ClusterTaggableManager(through=PostTag, blank=True)
    ...

    content_panels = Page.content_panels + [
        ...
        FieldPanel('tags')
    ]

当我想在 wagtail admin 上编辑 tags 字段时,它不仅会建议页面标签,还会建议图片标签。我想知道如何从建议中删除图片标签。

在我的项目中,页面标签与图片标签无关。

要了解场景,请看这两张图片:

我不想看到 river 标签作为页面标签的建议:

这可能吗?如果不是,是否可以从鹡鸰图像模型中删除 tags 字段?

您可以通过设置从 taggit.models.TagBase 延伸的 a custom Tag model 来实现。然后将其作为与用于图像和文档的默认标记模型不同的模型进行处理。

from django.db import models
from modelcluster.contrib.taggit import ClusterTaggableManager
from modelcluster.fields import ParentalKey
from taggit.models import TagBase, ItemBase

class PostTag(TagBase):
    class Meta:
        verbose_name = "post tag"
        verbose_name_plural = "post tags"


class TaggedPost(ItemBase):
    tag = models.ForeignKey(
        PostTag, related_name="tagged_posts", on_delete=models.CASCADE
    )
    content_object = ParentalKey(
        to='myapp.PostPage',
        on_delete=models.CASCADE,
        related_name='tagged_items'
    )

class PostPage(Page):
    ...
    tags = ClusterTaggableManager(through=TaggedPost, blank=True)

在此示例中,PostTag 是自定义标签模型,而 TaggedPost 是将标签与帖子相关联的 link table(相当于代码中的 PostTag)。