在Django中有没有办法为内联管理表单创建单独页面?

9 投票
2 回答
1066 浏览
提问于 2025-04-15 22:36

假设我有一个模型A。然后,我有几个模型B、C、D、E等,它们每个都和模型A有个关联。 我知道我可以把B、C、D等作为模型A的内嵌表单,这样在创建模型A的时候,就可以看到添加多个子模型的表单,但我觉得这样会让页面显得很拥挤,而且很大。

有没有办法让每个表单在不同的页面上,而不是把所有的表单都放在同一个页面上?换句话说,就是从模型A可以链接到创建或编辑关联的模型B、创建或编辑关联的模型C等等?

谢谢!

2 个回答

0

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

${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 %}

这方法有点原始,但能满足你的需求。处理列表和复杂的数据汇总就比较麻烦了,你需要检查原始数据是否存在,以确保不会出现模板错误。

2

我正在寻找一种方法来做到完全相同的事情。看起来答案可能是“代理模型”。这个答案被建议用来解决这个Stack Overflow的问题:

django admin: 分开只读视图和修改视图

…还有这个关于同一个模型的多个管理列表的问题:

在Django admin中为同一模型创建多个ModelAdmins/视图

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

Django | 模型 | Django文档#代理模型

我自己也是Django的新手,所以等我搞明白后会发一个更完整的回复。

撰写回答