加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Django admin:通过URL传递变量

发布时间:2020-12-16 23:07:04 所属栏目:Python 来源:网络整理
导读:我想通过URL将变量传递给 django admin中的另一个页面. 它似乎不起作用,我想传递变量“/?name = hello”,并通过request.GET.get [“name”,“”]捕获它.但是url变为“/?e = 1”过了之后. 如果我使用默认参数’q’,它可以工作,但它会有冲突. 看来这个问题只
我想通过URL将变量传递给 django admin中的另一个页面.
它似乎不起作用,我想传递变量“/?name = hello”,并通过request.GET.get [“name”,“”]捕获它.但是url变为“/?e = 1”过了之后.
如果我使用默认参数’q’,它可以工作,但它会有冲突.
看来这个问题只是django-admin.我需要通过网址传递它而不是发布…
有谁知道如何解决这个问题

谢谢

解决方法

问题是当get_query_set尝试将其解析为模型字段时,查找名称不存在.因此引发了IncorrectLookupParameters()异常,该异常又重定向到不太有用的“e = 1”url.这个问题在Django 1.4中通过引入自定义filterspecs来解决.在此之前,一种可能的解决方案是动态覆盖ModelAdmins get_changelist()方法返回的ChangeList类.

这个解决方案适用于Django 1.3:

class MyModelAdmin(ModelAdmin):

    def get_changelist(self,request,**kwargs):
        changelist_class = super(MyModelAdmin,self).get_changelist(request,**kwargs)

        class CustomChangeList(changelist_class):
            def __init__(self,*args,**kwargs):
                self._name = request.GET.get('name')
                super(CustomChangeList,self).__init__(request,**kwargs)

            def get_query_set(self,**kwargs):
                if self._name:
                    del self.params['name']

                qs = super(CustomChangeList,self).get_query_set(*args,**kwargs)

                if self._name:
                    return qs.filter([FILTER WHAT YOU WANT HERE...])

                return qs


        return CustomChangeList

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读