2012-05-23 16 views
7

Ben sarılmış işlev tarafından kullanılmakta olan bir content_type ve object_id benim şablonlar ve js kullanmak bir kod çevirmeye çalışır:Güncelleme request.POST veya request.GET

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) 

The Takılı kaldığım yer, request.POST/request.GET QueryDict öğesinin güncellenmesidir. Django bu dicts'i değişmez olarak rapor ediyor. Onları nasıl güncelleyebilirim?

djangodocs'dan itibaren .update, "son değer mantığını" orada tarif ettim, ki bu mükemmel bir şekilde iyi olurdu. Ama bu olmuyor.

request.GET = request.GET.copy().update(ud_dict) 

burada SO bu konuda a somewhat similar question yoktur, ama tatmin edici bir cevap aldım: bir kopyasını oluşturma ve request.GET o yeniden atama ya da çalışmak için görünmüyor. Bu soruya aynı kodu kullanarak ben sadece güncellemeden sonra request.POST veya request.GET için boş bir getiri elde:

request._get = request.GET.copy() 
import ipdb;ipdb.set_trace() 

ipdb> request.GET 
ipdb> 

Yani ben bu konuda ne yapabilirim

?

cevap

11

update(...) yönteminde dönüş değeri yoktur, örneğini yerinde günceller. Bu nedenle, yerine

request.GET = request.GET.copy() 
request.GET.update(ud_dict)