如何在Django管理自定义列中获取请求参数?

时间:2018-08-23 14:35:49

标签: python django python-3.x django-admin

我需要在Django的管理change页中保留有关过滤和搜索的信息。

因此,当用户按"?away_team__id__exact=267821"进行过滤时,我需要将此查询附加到change page网址中。

假设我们通过上面的查询过滤了对象。这是变更列表的网址:

http://127.0.0.1:8000/matches/match/?away_team__id__exact=267821

我想创建change列,该列将用户重定向到当前对象的change页,并将查询追加到url,因此:

http://127.0.0.1:8000/matches/match/2009/change/

网址为:

http://127.0.0.1:8000/matches/match/2009/change/?away_team__id__exact=267821

问题是我无法在自定义列方法中访问请求。我尝试使用模板语言来完成此操作,但没有成功,我得到了:

http://127.0.0.1:8000/matches/match/1996/change/?{{%20request.GET.urlencode%20}}

这是方法:

def change(self,obj):
    return mark_safe(f"""<a class="changelink" href="{reverse("admin:matches_match_change",args=(obj.pk,))}"""+"?{{ request.GET.urlencode }}\""+"><span class='icon'>Zmeniť</span></a>")

你知道怎么做吗?

编辑

这是因为我需要在NEXT对象页面中创建一个PREVIOUSchange按钮,以便用户可以直接进入下一个对象。

1 个答案:

答案 0 :(得分:2)

您只需将当前请求存储在更改列表视图中的admin实例上,以使其可用于后续方法:

class YourAdmin(ModelAdmin):
    def changelist_view(self, request, *args, **kwargs):
        self.request = request
        return super().changelist_view(request, *args, **kwargs)

    def change(self, obj):
        request = getattr(self, 'request', None)
        if request:
           # use request.GET to construct the link