我使用多方租用,并通过查询参数传递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? (或者甚至可以建议我使用不同的方法来使管理站点租户知道)。
提前致谢。
答案 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管理站点不知道您的查询参数(在请求到达管理视图之前将其删除)。请注意,该中间件应位于设置中的中间件列表的顶部。
这很脏,很乱。虽然我还没有找到更好的解决方案。