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

Mil*_*ano 3 python django django-admin python-3.x

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

因此,当用户按 过滤时"?away_team__id__exact=267821",我需要将此查询附加到change pageurl。

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

http://127.0.0.1:8000/matches/match/?away_team__id__exact=267821
Run Code Online (Sandbox Code Playgroud)

我想制作change将用户重定向到change当前对象页面并将查询附加到 url 的列,而不是:

http://127.0.0.1:8000/matches/match/2009/change/
Run Code Online (Sandbox Code Playgroud)

网址将是:

http://127.0.0.1:8000/matches/match/2009/change/?away_team__id__exact=267821
Run Code Online (Sandbox Code Playgroud)

问题是我无法在自定义列方法中访问请求。我尝试使用模板语言来做到这一点,但没有成功,我得到:

http://127.0.0.1:8000/matches/match/1996/change/?{{%20request.GET.urlencode%20}}
Run Code Online (Sandbox Code Playgroud)

这是方法:

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>")
Run Code Online (Sandbox Code Playgroud)

你知道怎么做吗?

编辑

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

sch*_*ggl 8

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

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
Run Code Online (Sandbox Code Playgroud)