在django数据库中存储JSON变量

问题描述 投票:0回答:1

在我使用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
json django django-models django-rest-framework
1个回答
2
投票

如果你使用PostgreSQL,你有内置的JSONField

否则有几个实现,如django-jsonfield,管理员我将它与django-jsoneditor配对

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

© www.soinside.com 2019 - 2024. All rights reserved.