更改请求的request.GET查询字典的值

14

我想在Django中更改request.GET的查询字典对象。 我尝试过这个方法,但是我做出的更改没有反映出来。 我尝试了这个:

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

我明白了。

<QueryDict: {}> as my output

在Django中是否有可能修改request.GET查询字典对象?


3
为什么要更改 request.GET - Simeon Visser
我需要对用户输入的文本进行分类,然后将其传递给另一个函数,该函数使用request.GET查询字典进行进一步处理。 - Anurag Sharma
1
可能是django修改请求对象的重复问题。 - Louis
1
可能是django-为什么request.POST对象是不可变的?的重复问题。 - Ciro Santilli OurBigBook.com
2个回答

22

您无法更改request.GETrequest.POST,因为它们是QueryDict的实例,根据文档,它们是不可变的

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


8

如果您添加一个小步骤,您的代码应该可以工作:现在您正在复制 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)

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接