【问题标题】:JSON data saving using Django 3.3使用 Django 3.3 保存 JSON 数据
【发布时间】:2021-09-22 10:04:24
【问题描述】:

众所周知,Django=3 支持 JSONField 。 我正在尝试使用 JavaScript 在我的 Django 项目中保存 JSON 数据,我在 输入字段 中获取数据,如下所示:

[{"id":1,"Name":"Antenna","Pieces":"","Weight":"","Weight Types":"","Quantity":"12",
    "Cargo Charge":"12","Customs Charge":"12"},

{"id":2,"Name":"Soap","Pieces":"12","Weight":"12","Weight Types":"","Quantity":"",
    "Cargo Charge":"12","Customs Charge":"12"}]

我使用输入字段将数据保存到 MySql 数据库。

product_list = self.request.POST['product_list_json']

因此,product_list_json 是 inout 字段的名称。 但是保存的数据被赋予了不同的视图,保存的数据看起来像:

"[{\"id\":1,\"Name\":\"Antenna\",\"Pieces\":\"\",\"Weight\":\"\",\"Weight Types\":\"\",
    \"Quantity\":\"12\",\"Cargo Charge\":\"12\",\"Customs Charge\":\"12\"},
{\"id\":2,\"Name\":\"Soap\",\"Pieces\":\"12\",\"Weight\":\"12\",\"Weight Types\":\"\",
    \"Quantity\":\"\",\"Cargo Charge\":\"12\",\"Customs Charge\":\"12\"}]"

问题是,数据正在保存额外的 " \ " 。我该怎么做才能解决这个问题?

【问题讨论】:

  • django 3.3 还出来了吗?

标签: python-3.x django django-models django-jsonfield django-mysql


【解决方案1】:

Django 中的 Jsonfield,获取一个 dict 或一个列表并将它们转换为 JSON (str) 并将它们保存在 DB 中,只需从 request.POST 加载接收到的 JSON 并发送它,它就可以正常工作了。

【讨论】:

    【解决方案2】:

    简单的 CharField 可以为您工作。它可以像这样工作。

    models.py

    class subscription_info(models.Model):
         info=models.CharField(max_length=2000,null=True,blank=True)
    

    views.py

    from myApp.models import subscription_info as sInfo
    
    def For_AJAX(request):
        if request.method=='POST':
            data=request.body.decode('utf-8')
            mymodel=sInfo()
            mymodel.info=data
            mymodel.save()
            return HttpResponse(status=201)
        else:
           return HttpResponse(status=204)
    
    def For_Form(request):
            if request.method=='POST':
                data=request.POST.get('InputFieldName')          
                mymodel=sInfo()
                mymodel.info=data
                mymodel.save()
                return HttpResponse(status=201)
            else:
               return HttpResponse(status=204)
    

    从数据库中检索数据后,根据您的要求使用json.loads()json.dumps()

    【讨论】:

    • 使用CharField帮助存储数据。但为了避免 max_lenght 问题的风险,我使用 TextField
    猜你喜欢
    • 2017-10-16
    • 2019-05-05
    • 1970-01-01
    • 1970-01-01
    • 2021-02-07
    • 1970-01-01
    • 1970-01-01
    • 2013-02-28
    • 1970-01-01
    相关资源
    最近更新 更多