Django-Wagtail - 将模型添加到内容面板时如何选择 "Choose A Page"面板?

标签 django wagtail

我不确定我在这里是不是真的很厚,但我正在努力在 list of available panels 中找到这个面板。 .起初我以为是 PageChooserPanel 但事实并非如此。这就是我要找的:

Choose A Page Panel

将链接插入 RichTextField 时可以使用此面板。它非常适合我的需求,但我似乎无法在其他任何地方找到它。

我正在尝试创建一个字段,编辑者可以在其中选择现有页面或指向外部 URL 的链接。然后,该 URL 将输入到我模板中的 ref="{{ page.my_url }}"

最佳答案

此选择器在富文本之外不可用,因为页面链接和外部 URL 链接在数据库中有不同的表示 - 外部链接是纯 URL 字符串,但页面链接存储为 ForeignKey 指向相关页面 ID。 (这可以确保链接不会在页面的 slug 发生变化时中断。)因此,您无法在模型上定义可以处理这两种值的字段类型。

一个常见的解决方法是并排使用两个可选字段 - 一个用于输入内部链接的 PageChooserPanel 和一个用于外部链接的 FieldPanel(带有 URLField) - 并在模型中包含一些逻辑以从任何一个返回 URL一个被填写:

class SomePage(Page):
    related_page = models.ForeignKey('wagtailcore.Page', null=True, blank=True, related_name='+', on_delete=models.SET_NULL)
    related_external_url = models.URLField("External link", blank=True)

    content_panels = Page.content_panels + [
        PageChooserPanel('related_page'),
        FieldPanel('related_external_url'),
    ]

    def related_url(self):
        if self.related_page:
            return self.related_page.url
        elif self.related_external_url:
            return self.related_external_url

关于Django-Wagtail - 将模型添加到内容面板时如何选择 "Choose A Page"面板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47210611/

相关文章:

python - 如何将 formbuilder 制作的表单添加到 Wagtail 中的每个页面?

django - 在 Wagtail 主页上显示博客文章

css - 鹡鸰新安装: CSS not working

python - Django对象查询集通过匹配日期时间过滤

python - Django static_url 当 script_name 设置时?

python - 澄清/何时/何地在 django/python 中使用 super

wagtail - 列 clean_name 不存在(Wagtail 2.10)

python - 将 Wagtail 与 Django 管理集成

Django根据另一个字段表单更新表单

python - 为外键字段创建 post_save 信号