我正在创建一个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
,我可以将这些表单显示给用户并保存他/她输入的值以进行进一步处理。
我进行了搜索,但没有找到像这样从JSON创建Django表单的任何应用。我可以自己编写这样的应用程序,我只是想知道是否已有任何内容。
如果不是,那么您至少了解任何可用来描述表单的JSON模式格式吗?再说一次,我可以自己想办法,但我想看看一些例子,这样我就不会遗漏重要的可能性,并且有一些扎实的起点。
谢谢!
答案 0 :(得分:2)
您可以像这样使用django-jsonforms:
forms.py:
Can't read from server. It may not have the appropriate access-control-origin settings
views.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)
some_html:
from .forms import CustomForm
def some_view(request):
return render(request, 'some_html.html', {'form': CustomForm()})
有关更多信息,请访问docs
修改:
您可以通过修改选项字典来删除表单中的多余按钮:
<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>