如何在 Wagtail 中为多个页面 类 创建标签字段?
How to create a tags field for multiple Page classes in Wagtail?
我想为我网站中几乎每个模型都会有的关键字添加一个字段。如果我不必为每个页面模型定义一个“TaggedPage”class,那将是理想的。所以我创建了一个 BasePage 抽象模型,但 ParentalKey 似乎不适用于抽象模型。我该如何解决?
我收到这个错误:
home.TaggedPage.content_object: (fields.E300) Field defines a relation with model 'home.BasePage', which is either not installed, or is abstract.
home.TaggedPage.content_object: (fields.E307) The field home.TaggedPage.content_object was declared with a lazy reference to 'home.basepage', but app 'home' doesn't provide model 'basepage'.
home/models.py 包含这些模型:
class PageTag(TagBase):
""" Tag used for the keywords meta html tag"""
class Meta:
verbose_name = "search/meta keyword"
verbose_name_plural = "search/meta keywords"
class TaggedPage(ItemBase):
tag = models.ForeignKey(
PageTag,
related_name="tagged_pages",
on_delete=models.CASCADE,
)
content_object = ParentalKey(
to='home.BasePage',
on_delete=models.CASCADE,
related_name='tagged_items'
)
class BasePage(MetadataPageMixin, Page):
tags = ClusterTaggableManager(
through='home.TaggedPage',
blank=True,
help_text="Used for the keywords meta html tag",
)
promote_panels = Page.promote_panels + [
FieldPanel('tags'),
]
class Meta:
abstract = True
class HomePage(BasePage):
parent_page_types = []
改为将 ParentalKey 指向 Page
模型:
content_object = ParentalKey(
to='wagtailcore.Page',
on_delete=models.CASCADE,
related_name='tagged_items'
)
在数据库级别,这将具有您正在寻找的行为:引用页面对象 ID 的外键字段。一个小的副作用是 tagged_items
关系将在所有页面对象上定义,而不仅仅是从 BasePage 继承的对象,但这不会导致任何问题。
我想为我网站中几乎每个模型都会有的关键字添加一个字段。如果我不必为每个页面模型定义一个“TaggedPage”class,那将是理想的。所以我创建了一个 BasePage 抽象模型,但 ParentalKey 似乎不适用于抽象模型。我该如何解决?
我收到这个错误:
home.TaggedPage.content_object: (fields.E300) Field defines a relation with model 'home.BasePage', which is either not installed, or is abstract.
home.TaggedPage.content_object: (fields.E307) The field home.TaggedPage.content_object was declared with a lazy reference to 'home.basepage', but app 'home' doesn't provide model 'basepage'.
home/models.py 包含这些模型:
class PageTag(TagBase):
""" Tag used for the keywords meta html tag"""
class Meta:
verbose_name = "search/meta keyword"
verbose_name_plural = "search/meta keywords"
class TaggedPage(ItemBase):
tag = models.ForeignKey(
PageTag,
related_name="tagged_pages",
on_delete=models.CASCADE,
)
content_object = ParentalKey(
to='home.BasePage',
on_delete=models.CASCADE,
related_name='tagged_items'
)
class BasePage(MetadataPageMixin, Page):
tags = ClusterTaggableManager(
through='home.TaggedPage',
blank=True,
help_text="Used for the keywords meta html tag",
)
promote_panels = Page.promote_panels + [
FieldPanel('tags'),
]
class Meta:
abstract = True
class HomePage(BasePage):
parent_page_types = []
改为将 ParentalKey 指向 Page
模型:
content_object = ParentalKey(
to='wagtailcore.Page',
on_delete=models.CASCADE,
related_name='tagged_items'
)
在数据库级别,这将具有您正在寻找的行为:引用页面对象 ID 的外键字段。一个小的副作用是 tagged_items
关系将在所有页面对象上定义,而不仅仅是从 BasePage 继承的对象,但这不会导致任何问题。