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