- PVSM.RU - https://www.pvsm.ru -

Django: виджет формы для редактирования JSON

Формат представления данных в форме JSON встречается нередко. К примеру, одним из применений может быть обмен JSON данными при работе с API стороннего сервиса, а в других случаях JSON данные могут храниться внутри модели приложения. В некоторых случаях данные необходимо изменить и отправить обратно удалённому сервису, в других сохранить в модели.

Если вспомнить о формах и виджетах форм в Django — мощных инструментах, которые упрощают работу. А затем обратиться к исходному коду [1] и официальной документации [2] мы увидим список из почти 20 готовых виджетов, которые доступны нам. Кроме официальных источников, существует перевод на русский [3].
К сожалению, там не найти ничего, что облегчило бы работу с JSON данными. Если обратиться к поисковым системам, можно найти несколько постов на stackoverflow и частных блогах, где предлагаются решения, которые будут рабочие для некоторых случаев. К сожалению, одни примеры перестают работать на данных со сложной вложенной структурой JSON, а другие требуют использование JavaScript для сереализации и обратного процесса.

Я сделал попытку найти решение, которое:

  • во-первых, не потребует дополнительных элементов, как например использование JavaScript
  • во-вторых, сможет работать с вложенными сложными структурами JSON

Решение было найдено в форме виджета для формы. Вот демонстрация того, как виджет строит форму из JSON и после сохранения обратно собирает в JSON:

image

Надеюсь на то, что оно кому-то, кроме меня, сможет облегчить жизнь. Возможно, кто-то сможет предложить улучшения и/или конструктивную критику.

Решение и примеры выложены на Github [4]

Автор: vodka_ru

Источник [5]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/python/35219

Ссылки в тексте:

[1] исходному коду: https://github.com/django/django/blob/master/django/forms/widgets.py

[2] официальной документации: https://docs.djangoproject.com/en/1.5/ref/forms/widgets/

[3] перевод на русский: http://djbook.ru/rel1.5/ref/forms/widgets.html

[4] выложены на Github: https://github.com/abbasovalex/django-SplitJSONWidget-form

[5] Источник: http://habrahabr.ru/post/180847/