是否可以在Django管理站点上使用查询参数

时间:2016-04-29 21:19:52

标签: python django django-rest-framework multi-tenant query-parameters

我使用多方租用,并通过查询参数传递schema name。我的middleware负责处理参数并设置正确的架构。它在我的API请求(直接帖子获取)上运行良好,但现在我需要通过指定模式名称来访问每个模式的管理页面URL查询参数。

问题在于:

当我访问

http://localhost:8000/admin/?schema_name=myschema

我的middleware会抓住该参数,但管理网站会将我重定向到包含此网址的登录页面:

http://localhost:8000/admin/login/?next=/admin/%3Fschema_name%3Dmyschema

在此重定向之后,它似乎再次通过我的middleware,这次没有?schema_name=myschema参数,导致我的middleware每次Django重定向URL时都将架构设置为public。

有没有办法让Django Admin网站知道这个参数,即使某些重定向更改了URL? (或者甚至可以建议我使用不同的方法来使管理站点租户知道)。

提前致谢。

1 个答案:

答案 0 :(得分:0)

只是在解决相同的问题。

问题是django管理员捕获了任何未知的(通过admin视图上的某些过滤器未注册的)查询参数,并且如果发现任何参数会引发重定向的异常

解决方案是在中间件内部调用类似的东西:

def extract_client_id_from_admin_api_url(request):
    request.GET._mutable = True
    client_id = request.GET.pop('client_id', None)
    request.GET._mutable = False
    return client_id[0] if client_id else None

因此django管理站点不知道您的查询参数(在请求到达管理视图之前将其删除)。请注意,该中间件应位于设置中的中间件列表的顶部。

这很脏,很乱。虽然我还没有找到更好的解决方案。