テンプレートと 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)
私が立ち往生しているポイントは、request.POST / request.GET QueryDict の更新です。Django は、これらの辞書を不変であると報告します。どうすれば更新できますか?
djangodocsから、 .updateはそこに記述されている「最後の値のロジック」を使用すると思いましたが、これで問題ありません。しかし、それは起こっていません。コピーを作成し、それを request.GET に再割り当てしても、うまくいかないようです:
request.GET = request.GET.copy().update(ud_dict)
このトピックについては、SO でやや似たような質問がありますが、満足のいく答えは得られませんでした。その質問と同じコードを使用すると、更新後に request.POST または request.GET に対して null が返されます。
request._get = request.GET.copy()
import ipdb;ipdb.set_trace()
ipdb> request.GET
ipdb>
それで、私はこれについて何ができますか?