Django 应用程序从 JSON 动态生成表单?

gec*_*kon 0 python forms django json

我正在创建一个 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
    },
]
Run Code Online (Sandbox Code Playgroud)

然后会给我一个带有两个CharFields的简单 Django 表单,我将向用户显示该表单并保存他/她输入的值以供进一步处理。

我进行了搜索,但没有找到任何从 JSON 创建 Django 表单的应用程序。我可以自己编写这样的应用程序,我只是想知道是否已经有任何东西。

如果没有,您至少知道任何允许描述表单的 JSON 模式格式吗?同样,我可以自己想出它,但我想看一些例子,这样我就不会遗漏重要的可能性,并且有一些可靠的开始。

谢谢!

Aht*_*ham 5

您可以像这样使用django-jsonforms

表格.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)
Run Code Online (Sandbox Code Playgroud)

视图.py:

from .forms import CustomForm

def some_view(request):      
    return render(request, 'some_html.html', {'form': CustomForm()})
Run Code Online (Sandbox Code Playgroud)

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>    
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请访问文档

编辑

您可以通过像这样修改选项字典来删除表单中的额外按钮:

options = {
        "no_additional_properties": True,
        "disable_collapse": True,
        "disable_edit_json": True,
        "disable_properties": True
}
Run Code Online (Sandbox Code Playgroud)