2011-05-25 101 views
2

这可能不可能,但有些东西告诉我我还没有想出一个办法。作为一个简单的例子,我将使用博客的概念。在Django中管理另一个模型的内部管理

在更改列表视图中,有多个博客。我选择一个博客进行编辑,并从更改视图中看到属于该博客的帖子更改列表。当我从那里添加/编辑帖子时,它通过URL或其他传递上下文的方式知道它属于哪个博客。

我知道如何设置管理模板来达到我想要的效果,但是我不能为我的生活弄清楚如何将上下文对象的id传递给子对象的视图。有什么建议么?

编辑:

对不起球员。基于我得到的答案,我一定还不够具体。

内联并不是我要找的。每个子对象都包含大量数据。使用内联会导致永远滚动的页面无法轻松访问特定的对象。我需要有一个更改列表样式的外观(内联的地方),然后点击一个链接就可以看到对象的正常变化视图,同时以某种方式将上下文对象的id传递给视图。

例如。如果我去一个特定的博客的网址会是这样的:

/admin/blog/blog/1/ 

然后,从那里我点击后,我发送到URL是一样的东西:

/admin/blog/blog/1/post/1/ 

的博客ID(1在这个例子中)可用于post对象,这样我就可以保存它的博客外键。这不一定要通过URL来完成,必然也是如此。我只需要一些提供上下文的方法来编辑帖子,并在该博客的上下文中使用该ID。

回答

1

传递parent_id的问题只与“新建”页面有关,对吧?对于任何现有的模型,我们已经知道这个ID。

我们分了两个部分的问题:1。 通PARENT_ID到新的页面 2.阅读PARENT_ID新的一页,并修改相应的形式

好稳健的解决方案将涉及修改管理员的观点在父和子模型。考虑到源代码的复杂性,这些工作太多了。所以,我个人解决快速和肮脏的JS黑客:

  1. 添加parent_id作为获取参数链接变更列表。

    ​​
  2. 在子页面上,如果在GET参数中有parent_id,则使用JS设置字段值。这仍然允许用户稍后改变它。如果您不希望字段值可更改,请禁用该字段并创建具有相同名称和parent_id作为值的新隐藏字段。

+0

我开始认为你是对的。我可能会在模板中添加GET参数,而不是依赖JS,但似乎这是合理完成它的唯一方法。我之前查看过'ModelAdmin'的源代码,虽然我可能会改变覆盖视图以使其发生,但我几乎必须将整个源代码粘贴到覆盖范围内,这会导致无法响应。 – 2011-05-25 19:50:58

0

所以你想链接到管理员内部的变更视图?这应有助于:

{% url admin:app_model_change object.pk %}