Я пытаюсь перевести код, который я использую в своих шаблонах и js, в content_type и object_id, которые используются обернутой функцией:
def translate_modelcode(function=None,redirect_field_name=None):
"""
translate an item-code specified in settings to a content_type
and the item-id to the object_id
"""
def _decorator(function):
def _wrapped_view(request, *args, **kwargs):
item_code=request.REQUEST.get('item-code',None)
if item_code:
object_id = request.REQUEST.get('item-id',None)
# resolve_modelcode get's the models name from settings
content_type = resolve_modelcode(item_code)
ud_dict = {'content_type':content_type,
'object_id':object_id}
if request.method == 'GET':
request.GET.update(ud_dict)
else:
request.POST.update(ud_dict)
return function(request, *args, **kwargs)
return _wrapped_view
if function is None:
return _decorator
else:
return _decorator(function)
Точка, в которой я застрял, это обновление запроса.POST / request.GET QueryDict. Django сообщает, что эти слова неизменны. Как я могу их обновить?
Из djangodocsя подумал, что .update будет использовать описанную там «логику последнего значения», с которой я был бы совершенно согласен. Но этого не происходит. Создание копии и переназначение ее в request.GET, похоже, тоже не работает:
request.GET = request.GET.copy().update(ud_dict)
Существует несколько похожий вопроспо этой теме здесь, на SO, но он так и не получил удовлетворительного ответа. Используя тот же код, что и в этом вопросе, я просто получаю нулевое значение для request.POST или request.GET после обновления:
request._get = request.GET.copy()
import ipdb;ipdb.set_trace()
ipdb> request.GET
ipdb>
Итак, что я могу с этим сделать?