2

我正在尝试在 Wagtail 中实现一个图表块,用户可以通过 DocumentChooserPanel 上传电子表格,然后根据该电子表格中的数据生成图表。

我目前有它的功能,但用户必须明确指定他们希望图表基于的变量:

class ChartBlock(blocks.StructBlock):
    data_file = DocumentChooserBlock()
    primary_variable = blocks.CharBlock(required=True,max_length=255)

    class Meta:
        template = 'dataviz/blocks/Chart.html'
        icon = 'cogs'
        label = 'Chart'

我想知道是否有任何方法可以使用上传并存储在 Documents 中的电子表格中的列标题动态填充 primary_variable 字段 - 这样用户就可以从可用变量列表中进行选择,而不必记住什么是变量被调用。

太感谢了!

4

1 回答 1

1

使用 Wagtail 的普通实现实现这一点并不容易。

页面编辑表单是在页面加载时生成的,包括选择列表的填充。我很确定 StreamField 块中的选择列表也是如此,它们是在添加块时填充的。

此代码挂在 wagtailadmin.edit_handlers、wagtailadmin.views.pages 和 wagtailcore.blocks 之间。这将是一个非常复杂的定制。

另一种可能的调查途径是在上传文档后使用insert_editor_js挂钩更新 primary_variable 字段。但是,我不确定您是否会找到一个可靠的 ID 来挂起事件侦听器。

但是,您很快就能自定义验证提交的页面。刚刚提交了一个PR以允许此自定义验证。添加primary_variable时,这应该会减少用户错误的数量。

这个功能应该在 Wagtail 1.4 中可用,我相信它很快就会发布。

我希望这会有所帮助。

于 2016-03-08T13:45:18.397 回答