Django приложение генерирует формы динамически из JSON? - PullRequest
0 голосов
/ 07 февраля 2019

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

Например, что-то вроде этого:

[
    {
        "name": "first_name",
        "label": "First Name",
        "type": "char",
        "max_length": 30,
        "required": 1
    },
    {
        "name": "last_name",
        "label": "Last Name",
        "type": "char",
        "max_length": 30,
        "required": 1
    },
]

Затем выдаст мне простую форму Django с двумя CharField с, которые я покажу пользователю и сохраню значения, которые он / она вводит для дальнейшей обработки.

Я искал, но не нашел ни одного приложениясоздание форм Django из JSON следующим образом.Я сам могу написать такое приложение, я просто хотел узнать, есть ли что-нибудь уже.

Если нет, знаете ли вы хотя бы какой-нибудь формат схемы JSON, который позволял бы описывать формы?Опять же, я могу придумать это сам, но я хотел взглянуть на некоторые примеры, поэтому я не упускаю важные возможности и имею что-то основательное для начала.

Спасибо!

1 Ответ

0 голосов
/ 07 февраля 2019

Вы можете использовать django-jsonforms следующим образом:

forms.py:

from django.forms import ModelForm, Form
from django_jsonforms.forms import JSONSchemaField

first_name_schema = {
      "type": "object",
      "required": ["First Name"],
      "properties": {
           "First Name": {
                "type": "string",
                "maxLength": 30                 
           }
      }     
    }

last_name_schema = {          
      "type": "object",
      "required": ["Last Name"],
      "properties": {
           "Last Name": {   
                "type": "string",               
                "maxLength": 30,                    
           }
      }
    }

options = {"no_additional_properties": True}

class CustomForm(Form):    
    first_name = JSONSchemaField(schema = first_name_schema, options = options)
    last_name = JSONSchemaField(schema = last_name_schema, options = options)

views.py:

from .forms import CustomForm

def some_view(request):      
    return render(request, 'some_html.html', {'form': CustomForm()})

some_html:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>    
<form id="some_form" action="/path/to/some_view/" method="post">
     {% csrf_token %}
     {{ form.media }}
     {{ form }} 
     <button type="submit">submit</button>           
</form>    

для получения дополнительной информации посетите документы

Изменить :

Вы можете удалить дополнительные кнопки в вашемФорма путем изменения вашего словаря опций, как это:

options = {
        "no_additional_properties": True,
        "disable_collapse": True,
        "disable_edit_json": True,
        "disable_properties": True
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...