QueryDict列表未被修改

时间:2018-04-16 09:44:15

标签: python django dictionary request mutable

我无法修改可变QueryDict对象的列表:

copy_GET = QueryDict('a=1&a=2&a=3', mutable=True)
l = copy_GET.getlist('a')
l
[u'1', u'2', u'3']

l.append(u'4') # add a new value to the list
copy_GET.getlist('a') # but list is not modified
[u'1', u'2', u'3']

copy_GET # query dict is not modified
<QueryDict: {u'a': [u'1', u'2', u'3']}>

3 个答案:

答案 0 :(得分:1)

如果查看getlist的{​​{3}},您可以看到它每次调用时都会创建一个新列表。修改列表不会改变查询字典。

您可以使用the implementation将密钥设置为更新列表。

copy_GET = QueryDict('a=1&a=2&a=3', mutable=True)
l = copy_GET.getlist('a')
l.append(u'4')
copy_GET.setlist('a', l)

答案 1 :(得分:0)

我们可以通过复制将其转换为可变QueryDict实例:

request.GET = request.GET.copy()
# update querydict like
request.GET['hi'] = 'hello'

答案 2 :(得分:0)

我遇到了这个问题,我的解决方案是:

mutable = query_params._mutable  # get out of the initial mutable
query_params._mutable = True
ip_list = query_params.pop('ip')
query_params._mutable = mutable # set the initial mutable