Sar*_*tra 15 django django-forms
我希望接受表单字段中的json数据,而不是使用某些数据库操作验证它.数据主要由整数数组组成.那么请你帮我一下,我该怎么办呢.
我试图谷歌这个,但没有得到任何体面的答案.请帮忙.
Roh*_*han 21
您需要使用它作为文本输入CharField.在该字段的clean方法中,您可以根据需要对其进行验证,以检查输入是否有效.
就像是:
class myForm(forms.Form):
jsonfield = forms.CharField(max_length=1024)
def clean_jsonfield(self):
jdata = self.cleaned_data['jsonfield']
try:
json_data = json.loads(jdata) #loads string as json
#validate json_data
except:
raise forms.ValidationError("Invalid data in jsonfield")
#if json data not valid:
#raise forms.ValidationError("Invalid data in jsonfield")
return jdata
Run Code Online (Sandbox Code Playgroud)
您还可以找到JSON数据输入的自定义字段.
您可以使用该决定使用 JSON数据中的字段创建表单
例:
forms.py
# -*- coding: utf-8 -*-
from django import forms
from splitjson.widgets import SplitJSONWidget
class testForm(forms.Form):
attrs = {'class': 'special', 'size': '40'}
data = forms.CharField(widget=SplitJSONWidget(attrs=attrs, debug=True))
Run Code Online (Sandbox Code Playgroud)
views.py
# -*- coding: utf-8 -*-
from django.shortcuts import render_to_response
from django.template import RequestContext
from forms import testForm
def test_dict(request):
json = {'a': 1,
'b': 2,
'c': 3,
'd': 4}
form = testForm(request.POST or None, initial={'data': json})
if form.is_valid():
# validate and save
pass
template = 'test_template.html'
context = RequestContext(request, {'form': form})
return render_to_response(template, context)
Run Code Online (Sandbox Code Playgroud)
template.py
<!doctype html>
<html>
<head></head>
<body>
Errors:
{% for field, error in form.errors.items %}
<ul>
<li>{{ error }}</li>
</ul>
{% empty %}
no errors
{% endfor %}
<hr/>
List of:
<form action="" method="post">
{% csrf_token %}
{{ form.as_p}}
<input type="submit" value="Submit" />
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
结果:

| 归档时间: |
|
| 查看次数: |
21997 次 |
| 最近记录: |