有没有办法在 Django 中为内联管理表单设置单独的页面?

Posted

技术标签:

【中文标题】有没有办法在 Django 中为内联管理表单设置单独的页面?【英文标题】:Is there a way to have separate pages for inline admin forms in Django? 【发布时间】:2011-02-18 08:41:30 【问题描述】:

假设我有一个模型 A。然后,我有几个模型 B、C、D、E 等,每个模型都有一个模型 A 的外键。我知道我可以将 B、C、D 等设置为模型的内联A 这样当我创建模型 A 时,它会显示为每个子模型添加多个项目的表单集,但我认为这会使页面变得相当混乱且非常大。

有没有办法以某种方式,而不是将所有这些表单集内联在同一页面上,而是将每个表单集放在单独的页面上?换句话说,是否会有从模型 A 到创建/编辑关联模型 B、创建/编辑关联模型 C 等的链接?

谢谢!

【问题讨论】:

没有答案?这似乎是一个常见的用例? 【参考方案1】:

我正在寻找一种方法来做同样的事情。看起来答案可能是“代理模型”。建议将其作为此 Stack Overflow 查询的答案:

django admin: separate read-only view and change view

...这个查询询问同一模型的多个管理员列表:

Multiple ModelAdmins/views for same model in Django admin

这里有关于代理模型的文档:

Django | Models | Django documentation#Proxy models

我自己是 Django 的新手,所以一旦我开始工作,我会发布更完整的回复。

【讨论】:

【参考方案2】:

简单的答案是创建一个文件:

$TEMPLATE_DIR/admin/app/modelA/change_form.html

在您的变更表单中,您可以这样做:

% extends "admin/change_form.html" %
% block after_related_objects %
<ul>
   <li><a href="/admin/app/modelB/ original.modelB.id /">Edit modelB</a></li>
</ul>
% endblock %

它有点原始,但它可以满足您的需求。列表和复杂的聚合比较棘手,您需要测试原始的存在以确保不会生成模板错误。

【讨论】:

以上是关于有没有办法在 Django 中为内联管理表单设置单独的页面?的主要内容,如果未能解决你的问题,请参考以下文章

Django 中的内联表单验证

最初在 django 内联表单集中设置不同的外键值

django 1.5 管理员内联额外

如何在 Django 管理员中为模型字段使用自定义表单字段?

如何从 django 中的内联表单接收上传的文件?

如果引发 ValidationError,删除链接会在 Django 管理内联表单集中消失