我在json下面作为来自客户端的输入
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")
在我的视图中将它分配给inputV_wc对象,如下所示
查看:
[
{'id': 0, 'name': 'Housing', 'value': 14},
{'id': 1, 'name': 'Bank', 'value': 18}
]
目前,如果我的输入json有5行,那么上面的视图肯定会因Index超出范围而失败。 如果输入json有2行,它又会因缺少条目而失败 - 模型无法保存。
如何编写视图,以便json具有不同数量的对象,如
来自一个用户的输入 -
[
{'id': 0, 'name': 'Housing', 'value': 3},
{'id': 1, 'name': 'Bank', 'value': 18},
{'id': 2, 'name': 'Housing1', 'value': 14},
{'id': 3, 'name': 'Bank1', 'value': 12}
]
来自其他用户的输入 -
highlight: function ( element, errorClass, validClass ) {
$('div.TempX>button').addClass( "btn-danger" );
$('#Filter').addClass( "btn-danger" );
},
unhighlight: function ( element, errorClass, validClass ) {
$('div.TempX>button').removeClass( "btn-danger" );
$('#Filter').removeClass( "btn-danger" );
}
可以处理吗?
每个输入的Json行最多可以是1到15个。
我读到了关于使用** kwargs来处理类似的场景..但我无法弄清楚如何申请保存我的模型以获得各种json输入。
答案 0 :(得分:1)
如果我理解正确,我想您只想使用for
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()
如果您想一次插入所有对象,根据您显示的内容,您可以使用bulk_create
:
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)