11

我想request.GET在 django 中更改 querydict 对象。我试过了,但我所做的更改没有反映出来。我试过这个

tempdict = self.request.GET.copy() # Empty initially
tempdict['state'] = ['XYZ',]
tempdict['ajaxtype'] = ['facet',]
print self.request.GET

我明白了

<QueryDict: {}> as my output

是否可以更改request.GETdjango 中的 querydict 对象?

4

2 回答 2

19

您不能更改request.GETorrequest.POST因为它们是QueryDict根据文档不可变的实例:

QueryDict 实例是不可变的,除非您创建它们的 copy()。这意味着您不能直接更改 request.POST 和 request.GET 的属性。

于 2013-10-08T12:01:42.233 回答
3

如果您添加一个小步骤,您的代码应该可以工作:您现在正在制作 的副本request.GET,但您尚未将其分配回request. 所以它只是一个独立的对象,与 没有request任何关系。

这将是必要的改进:

tempdict = self.request.GET.copy()
tempdict['state'] = ['XYZ',]
tempdict['ajaxtype'] = ['facet',]
self.request.GET = tempdict  # this is the added line
print(self.request.GET)

我已经在编写自定义中间件时对其进行了测试,但我认为它在所有地方都以相同的方式工作。

于 2021-05-03T12:26:36.963 回答