визуализировать jsonschema как форму с помощью django-jsonschema-form или django-schemulator - PullRequest
0 голосов
/ 25 октября 2018

Куски JSON Schema легко используются с внешними библиотеками JavaScript, такими как Angular, React и Alpaca, для создания HTML-форм с проверкой.Это также должно работать с решением Python django-jsonschema-form или django-schemulator , но я новичок в Django и у меня много проблем с его разработкой ..

Вот скриншот из видео AlpacaJS , в котором легко сообщается, чего он должен достичь:

JSON Schema becomes a form

У меня естьЯ провел некоторое тестирование с двумя вышеупомянутыми библиотеками, и первая, кажется, гораздо лучше поддерживается и менее глючная, единственная из двух в PyPI.

Мое дерево каталогов, созданное Django 1.11.4, выглядит следующим образом:

.
├── db.sqlite3
├── jschemaforms
│   ├── admin.py
│   ├── apps.py
│   ├── forms.py
│   ├── __init__.py
│   ├── migrations
│   │   └── __init__.py
│   ├── models.py
│   ├── tests.py
│   └── views.py
├── manage.py
├── myproject
│   ├── __init__.py
│   ├── settings.py
│   ├── templates
│   │   ├── base.html
│   │   └── includes
│   ├── urls.py
│   └── wsgi.py
└── README.md

В документах для django-jsonschema-form указывается класс:

# Overriding widgets for all instances of JSONField on PageAdmin form
class PageAdmin(admin.ModelAdmin):
    formfield_overrides = {
        JSONField: {'widget': JSONSchemaWidget(schema)}
    }

Где в дереве каталогов должен находиться такой класс?

schema это кусок json, который вы кормите для определения своей формы

Я посмотрел наразличные ответы в этом вопросе SO, чтобы попытаться решить его:

Django Admin - Переопределение виджета пользовательского поля формы

Кажется, что forms.py иобъекта ModelAdmin достаточно для реализации этого, но я не уверен, где в дереве должен существовать объект ModelAdmin.

Как этого можно достичь с помощью Django?

  1. рендерингформа из jsonschema
  2. , проверяющая на стороне клиента, что пользователь помещает в форму по отношению к jsonschema
  3. , получая данные из запроса POST формы, когда пользователь нажимает кнопку "отправить" как json

Я не уверен, что эти два лibraries - это ответ ..

1 Ответ

0 голосов
/ 12 ноября 2018

Класс PageAdmin помещается в файл с именем admin.py, рядом с его соответствующим model.py.Вот документы Django 1.11 по поиску файлов администратора .

Вы также должны зарегистрировать администратора для вашей модели.Для этого вы используете django.contrib.admin.register декоратор.На этой же странице есть документы для этого декоратора.

Использование идет примерно так:

from somewhere import Page
from django.contrib import admin

# Overriding widgets for all instances of JSONField on PageAdmin form
@admin.register(Page)
class PageAdmin(admin.ModelAdmin):
    formfield_overrides = {
        JSONField: {'widget': JSONSchemaWidget(schema)}
    }

Этот фрагмент кода регистрирует ваш класс PageAdmin как ModelAdmin для вашего Page модель.

...