当输入是json时,保存模型的最佳方法是什么?

2024-06-16 08:47:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有下面的json作为来自客户端的输入

[
{'id': 0, 'name': 'Housing', 'value': 3}, 
{'id': 1, 'name': 'Bank', 'value': 8}, 
{'id': 2, 'name': 'Entertainment', 'value': 3}
]

在我的视图中,它被分配给inputV\u wc对象,如下所示

查看:

def savemore(request):
    if request.method == "POST":
        data=json.loads(request.body.decode())
        inputV_wc = data['wc']
    else:
        response_data = 'You have not saved any data!'
        return HttpResponse(response_data, content_type="text/plain")
    try:
        if not inputV_wc:
            test=''
        else:
            # WC - Insert wc again on each save rather update - time consuming
            if js_wex.objects.filter(pid = request.session.get('pid')).exists():
                js_wex.objects.filter(pid=request.session.get('pid')).delete()
            wc = js_wex(pid=request.session.get('pid'), wcname=inputV_wc[0]['name'],rating=inputV_wc[0]['value'],ordernum=inputV_wc[0]['id'])
            wc.save()
            wc = js_wex(pid=request.session.get('pid'), wcname=inputV_wc[1]['name'],rating=inputV_wc[1]['value'],ordernum=inputV_wc[1]['id'])
            wc.save()
            wc = js_wex(pid=request.session.get('pid'), wcname=inputV_wc[2]['name'],rating=inputV_wc[2]['value'],ordernum=inputV_wc[2]['id'])
            wc.save()
    except Exception as e:
        response_data = 'Ouch! Something went wrong!'+str(e)
    return HttpResponse(response_data, content_type="text/plain")

当前,如果我的输入json有5行,那么上述视图肯定会失败,索引超出范围。。 如果输入json有2行,它将再次失败,并丢失条目-无法保存模型

如果json有不同数量的对象,比如

来自一个用户的输入-

[
{'id': 0, 'name': 'Housing', 'value': 14}, 
{'id': 1, 'name': 'Bank', 'value': 18} 
]

其他用户输入-

[
{'id': 0, 'name': 'Housing', 'value': 3}, 
{'id': 1, 'name': 'Bank', 'value': 18}, 
{'id': 2, 'name': 'Housing1', 'value': 14}, 
{'id': 3, 'name': 'Bank1', 'value': 12} 
]

可以处理吗

每个输入的Json行最多可以是1到15行

我读过关于使用**kwargs来处理类似场景的文章。。但我不知道如何申请保存我的模型以供各种json输入


Tags: nameidjsondatagetvalueresponserequest
1条回答
网友
1楼 · 发布于 2024-06-16 08:47:43

如果我理解正确的话,我认为您只需要使用^{} statement

for row in inputV_wc:
    wc = js_wex(pid=request.session.get('pid'), wcname=row['name'], rating=row['value'], ordernum=row['id'])
    wc.save()

如果要一次插入所有对象,根据所显示的内容,可以使用^{}

rows = []
for row in inputV_wc:
    wc = js_wex(pid=request.session.get('pid'), wcname=row['name'], rating=row['value'], ordernum=row['id'])
    rows.append(wc)

js_wex.objects.bulk_create(rows)

相关问题 更多 >