微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Django Admin中从另一个模型的上下文中管理一个模型

如何解决在Django Admin中从另一个模型的上下文中管理一个模型

|| 这甚至可能是不可能的,但是有些事情告诉我,我还没有想办法。作为简化示例,我将使用博客的概念。 在变更列表视图中,有多个博客。我选择一个博客进行编辑,然后从更改视图中看到属于该博客的帖子的更改列表。当我从那里添加/编辑帖子时,它可以通过URL或其他传递上下文的方式知道它属于哪个博客。 我知道如何设置管理模板来实现我想要的功能,但是我一辈子都无法弄清楚如何将上下文对象的ID传递给子对象的视图。有什么建议么? 编辑: 对不起大家。根据我得到的答案,我一定不够明确。 内联不是我想要的。每个子对象都包含大量数据。使用内联会导致页面永久滚动,无法轻松访问特定对象。我需要有一个变更列表样式的外观(内联应该在其中),然后单击链接将带您进入该对象的常规变更视图,同时以某种方式将上下文对象的ID传递给该视图。 例如。如果我去一个特定的博客,URL将会是这样的:
/admin/blog/blog/1/
然后,从那里我单击一个帖子,然后发送到的URL类似于:
/admin/blog/blog/1/post/1/
博客ID(在此示例中为2)在发布对象中可用,因此我可以保存其博客外键。 URL也不一定必须这样做。我只需要一些方法来为正在编辑的帖子提供上下文,该帖子就在具有该ID的博客上下文中。     

解决方法

传递parent_id的问题仅与“创建新的”页面有关,对吧?对于任何现有模型,我们已经知道此ID。 让我们将问题分为两部分:  1.将parent_id传递到新页面  2.阅读新页面上的parent_id并相应地修改表单 好的健壮解决方案将涉及修改父模型和子模型的管理员视图。考虑到查看源代码时这些视图的复杂程度,工作量太大。因此,我个人会以快速又肮脏的JS hack来解决: 将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作为值的新隐藏字段。     ,所以您想从管理员内部链接到变更视图?这应该有助于:
{% url admin:app_model_change object.pk %}
    ,查看管理员内联:http://docs.djangoproject.com/en/1.3/ref/contrib/admin/#inlinemodeladmin-objects 它们允许您将子对象添加到父对象的详细信息页面。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。