【发布时间】:2011-03-17 20:02:09
【问题描述】:
我的很多模型都有一个“公司”模型的外键。每个登录用户都可以是一个或多个公司的一部分(用户 m2m 公司,不为空)。
我希望当前管理员用户在管理员索引页面或基本标题上打开“公司护目镜”,即选择列表,他们可以在其中切换他们的“当前”公司。这样做应该会自动应用“company equals”过滤器 - 对于具有 Company 外键的模型 - 除了任何其他过滤器。
实现这一目标的最佳方法是什么?
注意:这意味着作为管理界面的舒适功能,在此阶段不需要对模型进行实际保护(客户端视图确实需要,但我可以使用自定义管理器并通过 request.user 进行查找)。
我目前的想法是:
在会话中存储当前公司。
-
使用中间件从会话中查找当前公司,并将公司附加到所有相关链接:
a) change_list: (?/&)"company__eq=42"
b) change_view "add?company=42" 用于具有 Company 外键的模型。
这可能需要对 URL 进行反向或模式匹配以找出它们的模型并检查它是否存在外键(或者我可能会事先准备该列表以提高性能)。
-
在每个 ModelAdmin 表单中包含外键字段,但通过 CSS 将其隐藏,以便 change_view add("new") 包含来自链接的预设外键值而不提及。
李>
您认为这是一种可行的方法吗?
如果实现了http://code.djangoproject.com/ticket/10761,我想我可以指定一个自定义查询集,它从 request.session 读取当前公司并完成它。或许最好改为快速跟踪(=制作并提交补丁)该票?
编辑:或者只是在每个需要它/具有外键的 ModelAdmin 上重新定义 queryset() 方法?
【问题讨论】:
标签: django filter admin permanent