【问题标题】:Update request.POST or request.GET using a view decorator使用视图装饰器更新 request.POST 或 request.GET
【发布时间】:2012-05-23 07:48:23
【问题描述】:

我尝试将我在模板和 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 报告这些 dicts 是不可变的。我该如何更新它们?

djangodocs 开始,我认为 .update 会使用那里描述的“最后一个值逻辑”,我完全可以接受。但这并没有发生。创建一个副本并将其重新分配给 request.GET 似乎也不起作用:

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

在 SO 上有关于此主题的 a somewhat similar question,但从未得到令人满意的答案。使用与该问题相同的代码,我只是在更新后得到 request.POST 或 request.GET 的空返回:

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

ipdb> request.GET
ipdb> 

那我该怎么办呢?

【问题讨论】:

    标签: python django


    【解决方案1】:

    update(...) 方法没有返回值,它就地更新其实例。所以你应该写而不是request.GET = request.GET.copy().update(ud_dict)

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-21
      • 2010-12-11
      • 2012-05-03
      • 2012-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-15
      相关资源
      最近更新 更多