【问题标题】:Updating a single value in a list of dictionaries更新字典列表中的单个值
【发布时间】: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


【解决方案1】:

好的,我发现了问题所在。

django values() 不会像它看起来那样返回一个字典列表,而是一个 ValuesQuerySet。 因此,不可能像使用常规列表那样对此列表进行更新。

我所要做的就是把它变成一个字典列表:

updates = [item for item in data]

【讨论】:

    猜你喜欢
    • 2019-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多