代码之家  ›  专栏  ›  技术社区  ›  Milano

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

  •  1
  • Milano  · 技术社区  · 6 年前

    我需要保留有关筛选和搜索的信息 Django 管理员 change

    所以当用户筛选 "?away_team__id__exact=267821" ,我需要将此查询附加到 change page 网址。

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

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

    改变 将用户重定向到的列 改变 当前对象的页,并将查询附加到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 改变 对象页,以便用户可以直接进入下一个对象。

    1 回复  |  直到 6 年前
        1
  •  4
  •   user2390182    6 年前

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

    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