2012-05-23 21 views
7

मैं एक कोड मैं एक content_type और object_id जाता है कि लिपटे समारोह द्वारा किया जा रहा करने के लिए अपने टेम्पलेट्स और js में उपयोग का अनुवाद करने की कोशिश:अद्यतन request.POST या 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) 

बिंदु जहां मैं अटक गया हूं अनुरोध का अद्यतन है। POST/request.GET QueryDict। Django उन dicts को अपरिवर्तनीय के रूप में रिपोर्ट करता है। मैं उन्हें कैसे अपडेट कर सकता हूं?

djangodocs से मैंने सोचा था .update वहां वर्णित "अंतिम-मूल्य तर्क" का उपयोग करेगा, जो मैं पूरी तरह से ठीक हूं। लेकिन ऐसा नहीं हो रहा है। एक प्रतिलिपि बनाना और request.GET को फिर नियत है कि काम करने के लिए या तो प्रतीत होता है नहीं:

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

वहाँ a somewhat similar question इस विषय इतने पर यहाँ पर है, लेकिन यह एक संतोषजनक जवाब नहीं मिला। कि प्रश्न में के रूप में ही कोड का उपयोग करना मैं सिर्फ अद्यतन करने के बाद request.POST या request.GET के लिए एक अशक्त रिटर्न प्राप्त:

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

ipdb> request.GET 
ipdb> 

तो क्या मैं इस बारे में क्या कर सकते हैं?

उत्तर

11

update(...) विधि में वापसी मूल्य नहीं है, यह इसके उदाहरण में जगह को अपडेट करता है। तो request.GET = request.GET.copy().update(ud_dict) के बजाय आपको

request.GET = request.GET.copy() 
request.GET.update(ud_dict) 
लिखना चाहिए
संबंधित मुद्दे