如何在 Django 管理自定义列中获取请求参数?
Posted
技术标签:
【中文标题】如何在 Django 管理自定义列中获取请求参数?【英文标题】:How to get request params in Django admin custom column? 【发布时间】:2019-01-29 23:32:54 【问题描述】:我需要在Django
admin change
页面中保留有关过滤和搜索的信息。
所以当用户按"?away_team__id__exact=267821"
过滤时,我需要将此查询附加到change page
url。
假设我们通过上面的查询过滤了对象。这是更改列表的网址:
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>")
你知道怎么做吗?
编辑
这是因为我需要在change
对象页面中创建NEXT
和PREVIOUS
按钮,以便用户可以直接进入下一个对象。
【问题讨论】:
您可以从request.META['HTTP_REFERER']
的更改视图本身的更改列表中提取查询字符串,以便处理该信息。
@schwobaseggl 覆盖更改视图是个好主意,我不知道管理员中有 change_view 功能。谢谢
@schwobaseggl 嗯,但是当用户第一次点击 NEXT 按钮时,HTTP_REFERER 将一文不值...
【参考方案1】:
您可以只将当前请求存储在更改列表视图中的管理实例上,以使其可用于后续方法:
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
【讨论】:
以上是关于如何在 Django 管理自定义列中获取请求参数?的主要内容,如果未能解决你的问题,请参考以下文章