You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django Admin自定义Queryset:URL传pid筛选后出现?e=1的解决方法

Django Admin URL传自定义ID筛选解决?e=1重定向问题

要实现通过URL传入pid参数筛选产品ID,同时避免页面刷新后出现?e=1的重定向问题,无需创建列表过滤器,只需在你的LaptopStockAdmin类中添加以下代码:

步骤1:重写get_changelist_instance方法

这个方法用于修改Admin变更列表页面允许的合法GET参数,将自定义的pid参数加入白名单,避免Django Admin将其判定为无效参数而触发重定向:

from django.contrib.admin.views.main import ChangeList

class LaptopStockAdmin(admin.ModelAdmin):
    # 你的其他Admin配置(如list_display等)
    
    def get_queryset(self, request):
        qs = super(LaptopStockAdmin, self).get_queryset(request)
        pid = request.GET.get('pid')
        if pid is not None:
            ids = [int(id) for id in pid.split(',')]
            return qs.filter(id__in=ids)
        return qs

    def get_changelist_instance(self, request):
        cl = super().get_changelist_instance(request)
        # 将自定义参数pid加入允许的参数列表
        cl.allowed_parameters.append('pid')
        return cl

原理说明

Django Admin的变更列表(ChangeList)会维护一个allowed_parameters列表,只有在该列表中的GET参数才会被视为合法。未在列表中的参数会触发重定向,并添加?e=1标记表示参数无效。通过将pid加入这个列表,Admin就会认可该参数的合法性,不再触发重定向。

同时,添加该参数到允许列表后,分页、排序等操作的URL会自动保留pid参数,确保筛选状态不会丢失。

内容的提问来源于stack exchange,提问作者Rob Michiels

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 16:27:23