2011-05-25 185 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 %}