在我的Wagtail网站上,我有一种方法可以向页面添加“链接页面”列表,以显示相关页面,文章等的列表:
from django.db import models
from modelcluster.fields import ParentalKey
from wagtail.core.models import Orderable
from wagtail.admin.edit_handlers import PageChooserPanel
class LinkedPage(Orderable):
target_page = models.ForeignKey('wagtailcore.Page',
null=True,
blank=False,
on_delete=models.SET_NULL,
verbose_name='Page',
related_name='+')
panels = [
PageChooserPanel('target_page', [
'articles.ArticlePage',
'myapp_core.ContentPage',
]),
]
class Meta:
abstract = True
ordering = ['sort_order']
class ContactPageLinkedPage(LinkedPage):
host_page = ParentalKey('myapp_core.ContactPage',
related_name='linked_pages')
然后我可以从ContactPage
模型中获得一个公开可见的链接页面列表:
from wagtail.core.models import Page
class ContactPage(Page):
# ...
def get_linked_pages(self):
public_pages = Page.objects.live().public()
pages = self.linked_pages.filter(target_page__in=public_pages)
return [lp.target_page for lp in pages]
当正常查看页面时,这一切都很好。但是,当尝试预览“联系页面”时,出现ValidationError:
[“'Root'值必须是整数。”]
这是从get_linked_pages()
开始的pages = ...
行开始的。 Here's the traceback.
我正在猜测,这可能是与模型集群相关的问题,例如this one,我有一段时间了,但是我还没有找到解决方法。
>答案 0 :(得分:0)
这不是一个正确的答案,但作为一个临时解决方法,我将get_linked_pages()
方法(和类似方法)更改为:
from django.core.exceptions import ValidationError
from wagtail.core.models import Page
class ContactPage(Page):
# ...
def get_linked_pages(self):
public_pages = Page.objects.live().public()
try:
pages = self.linked_pages.filter(target_page__in=public_pages)
except ValidationError:
return []
return [lp.target_page for lp in pages]
显然,这远非完美-预览中根本不会显示任何链接的页面,因此它不是一个很好的预览。但是目前至少可以看到页面的其余部分。