0

我正在尝试将Django Leaflet实现到我的 Wagtail 应用程序中。底层表单字段是GeoJSON字段。不过,我只有在将我的模型注册为片段而不是模型时才能正常工作Page

我可以根据模型添加模型实例,Page并且 GeoJSON 值已正确写入数据库。我还可以编辑要素几何,但几何不会显示在传单地图上。当 Wagtail 呈现Page基于模型的编辑视图时,GeoJSON 变成一个字符串并且反序列化失败:

Error creating geometry from value
'"{\"type\":\"Point\",\"coordinates\":[-322.276779,59.41526]}"'
(String input unrecognized as WKT EWKT, and HEXEWKB.)

为注册为片段的同一模型加载编辑视图有效,JSON 保持为 adict并且几何图形在传单地图上呈现。所以我怀疑 Wagtails 编辑处理程序context在处理片段时做了一些事情。在哪里寻找以及如何预防?

4

1 回答 1

0

我找到了解决方案。我将错误消息跟踪到它的方法并覆盖它。我的小部件现在看起来像这样:

[...]
from leaflet.forms.widgets import LeafletWidget

class LeafletWidgetWithMedia(LeafletWidget):
    include_media = True
    template_name = "widget.html"

    def deserialize(self, value):
        try:
            value = json.loads(value)  # this is the part I added
            return GEOSGeometry(value)
        except (GEOSException, ValueError, TypeError) as err:
            logger.error("Error creating geometry from value '%s' (%s)", value, err)
        return None

我仍然很好奇 Wagtails 内部发生了什么。

于 2020-01-21T10:36:48.340 回答