在django数据库中存储JSON变量

时间:2018-03-05 15:09:13

标签: json django django-models django-rest-framework

在我使用Gridster的应用程序中,我正在更改窗口小部件位置,然后将其保存为json变量。我想将此json变量存储在django数据库中。 为此,我不明白我应该如何定义views.py中的函数和models.py中可以存储json变量的类

我的HTML / JS模板是

var URL = "{% url 'my_view_url' %}";

   $('.js-seralize-update').on('click', function () {

            var s = gridster.serialize();
            updated_grid=JSON.stringify(s);
            $('#log').val(updated_grid);

            function updategridster(){
            var data = updated_grid;
            $.post(URL, data, function(response){
            if(response === 'success'){ alert('Yay!'); }
            else{ alert('Error! :('); }
    });
}

        });

我的views.py

def save_grid(request):
    if request.method == 'POST':

            # Some code to get json variable and store it to model
            return HttpResponse('success') # if everything is OK

我想在与view.py对应的models.py中编写某种类,以便保存JSON变量

EDIT1 我的models.py是

from django.db import models
from django.utils import timezone
from django.utils import simplejson as json

class update_grid(models.Model):
    data = JSONField(null=True, blank=True)

我只想将视图中的数据发送到此模型(如果正确)

修改2

我的JS脚本更新如下

  var URL = "{% url 'save-grid' %}";

     $('.js-seralize-update').on('click', function () {

                var s = gridster.serialize();
                updated_grid=JSON.stringify(s);
                $('#log').val(updated_grid);

                function updategridster(updated_grid){
                var data = updated_grid;
                $.post(URL, data, function(response){
                if(response === 'success'){ alert('Yay!'); }
                else{ alert('Error! :('); }
        });
    }
                 updategridster(updated_grid);          
            });

现在我收到此错误

 POST http://localhost:8000/calendar_grid/save-grid net::ERR_CONNECTION_ABORTED  jquery.min.js:2

1 个答案:

答案 0 :(得分:2)

如果您使用PostgreSQL,则内置JSONField

否则有几个类似django-jsonfield的实现,对于管理员我将其与django-jsoneditor配对

然后,您可以将JSON数据保存在单个字段中,对于内置的情况,您甚至可以对JSON结构中的特定键执行查询/过滤。