鹡鸰:编辑代码段与页面模型中 GeoJSON 字段的处理



我正在尝试将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 保持dict,几何图形在传单地图上呈现。所以我怀疑 Wagtails 编辑处理程序在处理片段时对context做了一些事情。去哪里看以及如何预防?

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

[...]
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

我仍然很好奇鹡鸰队内部发生了什么。

最新更新