trato de traducir un código que utilizo en mis plantillas y JS a un content_type y object_id que está siendo utilizado por la función envuelta:actualización request.POST o request.GET usando una vista decorador
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)
El punto donde estoy atascado es la actualización de la solicitud.POST/request.GET QueryDict. Django informa que esos dictados son inmutables. ¿Cómo puedo actualizarlos?
Desde el djangodocs pensé que .update usaría la "lógica de último valor" descrita allí, con lo cual estaría perfectamente bien. Pero eso no está sucediendo. La creación de una copia y la reasignación de que a request.GET no parece funcionar bien:
request.GET = request.GET.copy().update(ud_dict)
No es a somewhat similar question sobre este tema aquí en la SO, pero nunca obtuvo una respuesta satisfactoria. Utilizando el mismo código que en esa pregunta que acaba de obtener un retorno nulo para request.POST o request.GET después de actualizar:
request._get = request.GET.copy()
import ipdb;ipdb.set_trace()
ipdb> request.GET
ipdb>
Entonces, ¿qué puedo hacer al respecto?