我需要在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
对象页面中创建一个PREVIOUS
和change
按钮,以便用户可以直接进入下一个对象。
答案 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