“'根'值必须是整数。”预览a页时

时间:2019-02-06 12:07:24

标签: wagtail

在我的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,我有一段时间了,但是我还没有找到解决方法。

>

1 个答案:

答案 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]

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