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

问题描述

假设我们有一个这样定义的 wagtail 页面

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 字段时,它不仅会建议页面标签,还会建议图片标签。我想知道如何从建议中删除图片标签

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

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

enter image description here

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

enter image description here

这可能吗?如果没有,是否可以从 wagtail 图像模型中删除 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 是将标签与帖子相关联的链接表(相当于代码中的 PostTag)。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...