django.http.QueryDict
объекты, которые назначены request.GET
и request.POST
, неизменяемы.
Вы можете преобразовать его в изменяемый экземпляр QueryDict
, скопировав его:
request.GET = request.GET.copy()
После этого вы сможете изменить QueryDict
:
>>> from django.test.client import RequestFactory
>>> request = RequestFactory().get('/')
>>> request.GET
>>> request.GET['foo'] = 'bar'
AttributeError: This QueryDict instance is immutable
>>> request.GET = request.GET.copy()
>>> request.GET['foo'] = 'bar'
>>> request.GET
. Это было целенаправленно спроектировано таким образом, что ни одному из компонентов приложения не разрешено редактировать исходные данные запроса, поэтому даже создание неизменяемого QueryDict
снова нарушит эту конструкцию. Я бы по-прежнему предлагал вам следовать рекомендациям и назначать дополнительные данные запроса непосредственно на объект request
в вашем промежуточном программном обеспечении, несмотря на то, что он может заставить вас редактировать ваши источники.