django视图替换dict值 - 列表索引必须是整数,而不是str

时间:2014-09-16 23:53:43

标签: python django django-rest-framework

我使用Django REST框架将以下数据传入Django视图 -

{'varmst_starttype': 'SCH_DATE', 'varmst_offsets': '0000SUNDAY1', 'owner_name': 'Operations', 'varmst_publish': 'N', 'varmst_calc': 'Y', 'varmst_public': 'Y', 'varmst_desc': None, 'varmst_name': 'var_date ', 'varmst_readonly': 'N', 'varmst_value': 20140911, 'varmst_startdt': datetime.datetime(1899, 12, 30, 0, 0), 'varmst_lstchgtm': datetime.datetime(2014, 9, 10, 22, 0, 28), 'varmst_id': 1867, 'varmst_lstval': None, 'varmst_startcal': 0, 'varmst_type': 3}

我想要做的是使用' owner_name'上的键值。获得' id'通过去 -

ownername = request.DATA['owner_name']
ownerid = Owner.objects.filter(owner_name=ownername).values_list('owner_id')[0]

然后,我想删除'owner_name': 'Operations'并将其替换为'owner_id': 235

当我尝试在ownername上获得响应时,我收到以下错误 -

list indices must be integers, not str

我认为我正在使用

    def put(self, request, format=None):
        data = request.DATA
        data.update({'owner_id': 786})
        return HttpResponse(data)

我已更新以删除序列化程序,因为问题出现在我甚至进行序列化之前,但尝试修改请求数据。即使在一个简单的尝试更新request.DATA我得到错误。使用上面的PUT我得到以下内容 -

'list' object has no attribute 'update'

这是有道理的,因为我的理解是这是一个字典。但根据这个 -

http://stackoverflow.com/questions/1024847/add-to-a-dictionary-in-python

相同的过程应该适用于字典吗?

此尝试因问题的原始标题失败。

    def put(self, request, format=None):
        data = request.DATA
        data.['owner_id'] = 786
        return HttpResponse(data)

1 个答案:

答案 0 :(得分:1)

正如我在上下文中提到的那样 -

数据是来自request.DATA [' owner_name']的信息,这是一个字符串。

要访问数据['另一个字符串']将无效。

你想要data = request.DATA。

修改

抱歉 - 我忘记了request.DATA是不可变的。你需要做

data = request.DATA.copy()