Django-формы с полями json
Я ищу, чтобы принять данные json в поле формы, а затем проверить его с помощью некоторых операций базы данных. Данные в основном будут состоять из массива целых чисел. Поэтому, пожалуйста, помогите мне, как я могу это сделать.
Я попытался Google это, но не получил достойного ответа. Пожалуйста помочь.
4 ответов
вам нужно взять его в качестве ввода текста с помощью 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
вы также можете найти настраиваемое поле для ввода данных 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))
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)
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>
результат:
Регистрация django-json-field который реализует jsonfield и связанное поле формы.
есть самый популярный репозиторий github с JSONField реализация. Вы можете установить его с помощью:
pip install jsonfield
например, если у вас есть модель
from jsonfield import JSONField
from django.db import models
class MyModel(models.Model):
json_field = JSONField(default='', blank=True)
вы можете просто определить форму с проверкой JSON
from django import forms
from jsonfield.fields import JSONFormField
from myapp import models
class MyModelForm(forms.ModelForm):
class Meta:
model = models.MyModel
fields = '__all__'
field_classes = {
'json_field': JSONFormField,
}
и используйте эту форму в вашей модели администратора
from django.contrib import admin
from myapp.forms import MyModelForm
from myapp.models import MyModel
@admin.register(MyModel)
class MyModelAdmin(admin.ModelAdmin):
form = MyModelForm