2011-09-23 97 views
2

比方說,我有以下兩種模式,各有各的form創建模型的記錄。複製Django管理的「添加」按鈕

例如:

Business_Client Model: 
    busName field - CharField 
    mainContact field - ForeignKey(Contacts) 

Contacts Model: 
    firstName field - CharField 
    lastName field - CharField 

當用戶想要創建一個新的業務,他們將不得不選擇一個「主要聯繫人」從下拉菜單。但是,如果聯繫人不在列表中,他們必須首先創建記錄,然後再回來,並重新-start再次創造了business記錄。

管理界面讓一切變得簡單通過具有下拉菜單,您可以到Contact形式旁邊的小+按鈕,填寫好,打Save然後給你帶來Business形式,mainContact字段已經選擇到您新創建的Contact記錄中。

我該怎麼做!?!我一直在搜索谷歌,我正在縮短。任何人都有一些好的鏈接/教程,會讓我走?

謝謝!

回答

1

我從來沒有做過,但考慮這件事:

您有一個觀點

/add/business/ 

與名稱的字段,以及接觸的場(在它旁邊一個小加) 。加號只是一個鏈接,通過JavaScript創建新的彈出窗口,指向

/add/contact/ 

並且有一個javascript回調。當表單被提交,驗證並放入數據庫時​​,窗口關閉,並且ID /名稱被傳回原始表單並在該字段中自動輸入。

這似乎是django管理員如何做到的。你可以看一下的是,Django管理使用自己的小工具:

https://code.djangoproject.com/browser/django/trunk/django/contrib/admin/widgets.py#L218

具有HTML渲染功能:

https://code.djangoproject.com/browser/django/trunk/django/contrib/admin/widgets.py#L249

這表明它是簡單地用一個點擊數的錨鏈接指向相關的添加視圖的JavaScript彈出窗口。一旦表單被提交,值就被傳回。

https://code.djangoproject.com/browser/django/trunk/django/contrib/admin/static/admin/js/admin/RelatedObjectLookups.js#L55

+0

我認爲你的行號不再有效。他們指出看起來像完全不相關的代碼。 – Sardathrion