这可能甚至不可能,但有些事情告诉我,我还没有找到办法做到这一点。作为一个简化的例子,我将使用博客的概念。
在更改列表视图中,有多个博客。我选择一个博客进行编辑,从更改视图中,我看到属于该博客的帖子更改列表。当我从那里添加/编辑帖子时,它通过URL或其他传递上下文的方式知道它属于哪个博客。
我知道如何设置管理模板来实现我想要的,但我不能为我的生活弄清楚如何将上下文对象的id传递给子对象的视图。有什么建议吗?
修改
对不起伙计们。基于我得到的答案,我必须不够具体。
内联不是我想要的。每个子对象都包含大量数据。使用内联会导致页面永远滚动,无法轻松访问特定对象。我需要有一个更改列表样式的外观(内联所在的位置),然后单击一个链接,将获取该对象的正常更改视图,同时以某种方式将上下文对象的id传递给视图。
例如。如果我去了一个特定的博客,网址将是:
/admin/blog/blog/1/
然后,从那里我点击一个帖子,我发送的URL就像:
/admin/blog/blog/1/post/1/
博客ID(此示例中为1
)将可用于post对象,以便我可以保存其博客外键。这也不一定是由URL完成的。我只需要一些方法来为正在编辑的帖子提供上下文,它在具有该id的博客的上下文中。
答案 0 :(得分:1)
传递parent_id的问题仅与“创建新”页面有关,对吧?对于任何现有模型,我们已经知道这个id。
让我们将问题分成两部分: 1.将parent_id传递给新页面 2.在新页面上阅读parent_id并相应地修改表单
良好的强大解决方案将涉及修改父模型和子模型的管理视图。考虑到源代码时这些视图的复杂程度,需要做太多工作。所以,我个人会解决快速而肮脏的JS黑客攻击:
将parent_id作为get参数添加到更改列表中的链接。
$("#changelists_container .link_class").each(function(i,link){
link.attr("href", link.attr("href") + "?parent_id=" parentId; // assumes no other GET params
});
在子页面上,如果GET参数中有parent_id,请使用JS设置字段值。这仍然允许用户稍后更改它。如果您不希望字段值更改,请禁用该字段并创建具有相同名称的新隐藏字段,并将parent_id作为值。
答案 1 :(得分:0)
您想要从管理员中链接到更改视图吗?这应该有所帮助:
{% url admin:app_model_change object.pk %}
答案 2 :(得分:0)
查看管理员内联:http://docs.djangoproject.com/en/1.3/ref/contrib/admin/#inlinemodeladmin-objects
它们允许您将子对象添加到父对象的详细信息页面。