访问w的StreamField / RichText字段/块中的其他对象字段

时间:2019-07-19 05:50:37

标签: wagtail

我想执行以下操作:

  1. 创建一些包含数据的Django模型(或w页面)。
  2. 创建另一个包含StreamField或RichtextField的Page类型。 3。
  3. 当作者或编辑者在此字段中输入文本时,他/她可以使此信息显示在文本的呈现输出中的某处。最好使用常见的模板技术。

所以,可以说,我们有一个这样的模型:

class Person(models.Model):
    name = models.CharField(max_length=30)

然后我有一个使用StreamField的普通页面:

class NormalPage(Page):
    body = StreamField(block_types=[
        ('paragraph', blocks.RichTextBlock()),
    ])

    content_panels = Page.content_panels + [
        StreamFieldPanel('body')
    ]

我希望编辑者从数据库中选择他/她想要的人,并能够在RichTextBlock中执行以下操作:

{{ person.name }}

这可能吗?

1 个答案:

答案 0 :(得分:1)

为了能够选择普通的Django模型,请将其注册为代码段,如图here所示,然后使用SnippetChooserPanel选择人物:

from wagtail.snippets.models import register_snippet

@register_snippet
class Person(models.Model):
    name = models.CharField(max_length=30)

然后,如果您想将特定人员与特定页面相关联:

from wagtail.snippets.edit_handlers import SnippetChooserPanel

class NormalPage(Page):
    body = StreamField(block_types=[
        ('paragraph', blocks.RichTextBlock()),
    ])
    person = models.ForeignKeyField(Person)

    content_panels = Page.content_panels + [
        StreamFieldPanel('body'),
        SnippetChooserPanel('person'),
    ]