【问题标题】:"'Root' value must be an integer." when previewing a Wagtail Page“‘根’值必须是整数。”预览鹡鸰页面时
【发布时间】:2019-02-06 12:07:24
【问题描述】:

在我的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 我有一段时间了,但我还没有弄清楚如何解决它。

【问题讨论】:

    标签: wagtail


    【解决方案1】:

    这不是一个正确的答案,但作为一个临时修复,我已将 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]
    

    显然,这远非完美 - 预览中根本不会显示任何链接页面,因此它不是一个很好的预览。但至少现在可以看到页面的其余部分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多