Трясогузка: редактирование обработки поля Geo JSON в модели сниппета и страницы - PullRequest
0 голосов
/ 20 января 2020

Я пытаюсь внедрить Django Leaflet в мое приложение Wagtail. Основным полем формы является поле Geo JSON. Я только заставляю его работать должным образом, когда регистрирую мою модель как фрагмент , но не как модель Page.

Я могу добавить экземпляры моей модели на основе модели Page, и значение Geo JSON будет правильно записано в базу данных. Я также могу редактировать геометрию объектов , но геометрия не будет отображаться на листовой карте. Когда Wagtail визуализирует представление редактирования для модели на основе Page, Geo JSON превращается в строку, и десериализация завершается неудачно:

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

Загрузка представления редактирования для той же модели, зарегистрированной как фрагмент, работает, JSON остается dict, и геометрия отображается на листовой карте. Поэтому я подозреваю, что где-то обработчик редактирования Wagtails что-то делает с context, чего не делает при обработке фрагментов. Где искать и как это предотвратить?

1 Ответ

0 голосов
/ 21 января 2020

Я нашел решение. Я следовал за сообщением об ошибке к его методу и переписал его. Мой виджет теперь выглядит так:

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

Мне все еще интересно, что происходит внутри на стороне трясогузки.

...