【发布时间】:2014-03-04 14:06:59
【问题描述】:
我有一个网页,我将乘客信息列表显示为表格。这是通常的东西:到达时间、航班号等。
我已使表格可编辑,因此当用户单击包含信息的某个列时,他可以编辑该列。当他最终点击确认时,我只将已编辑的列连同值和行号发送到视图,该视图假设从我发送的数据中找到列表的行,找到键并更新原始值。
我从编辑列中得到的 json 值如下所示:
[{u'classname': u'flight', u'column': 6, u'value': u'F1521', u'row': 0}, {u'classname': u'flight', u'column': 6, u'value': u'FI521', u'row': 1}]
到目前为止,我更新值的代码如下所示:
# Original data
query = UploadOrderModel.objects.filter(hashId = receiptNr)
# Gives me a list of dictionaries containing these keys
data = query.values("office", "reserv", "title","surname","firstN",
"arrival", "flight", "transferF", "hotelD", "tour")
# Update
json_dump = json.loads(request.body)
if json_dump:
for d in json_dump:
# get row number
row = int(d['row'])
# updates dictionary value at row
data[row][d['classname']] = d['value']
但这不会更新值。我检查了是否获得了正确的值来更新并且它是,所以情况并非如此,行是正确的,如果我打印出来:
data[row][d['classname']]
我得到了我想要更新的元素。有什么很明显我在这里想念的吗。 我应该对整行进行更新吗?所以更新整个字典 当前位置?
编辑:
我仍然有问题。首先,我误读了你的好答案 lyschoening。我以为你的意思是 values() 不返回可写列表,我很傻。模型的保存稍后在代码中完成,并按预期工作。但是我仍然遇到我要更新的位置的字典根本没有更新的问题:/
【问题讨论】:
-
type(data)不是dict,不是吗? -
正确,数据是一个列表。所以说我有 row = 0,type(data[0]) 是索引 0 处的字典,所以我会考虑做 data[0][key] = newValue?
-
我假设您正在使用 Django。 afaik
QuerySet.values()确实返回带有值的可写字典,但对该字典的更改不会保存在模型中。您必须正确查询模型并在完成后调用save()函数。 -
感谢@lyschoening 清除此问题。现在一切都说得通了:D
-
不相关:不要在同一代码单元中为不同目的使用相同的名称(
data在您的代码中既是查询集又是列表)
标签: python django dictionary