2012-01-27 149 views
2

我一直在使用django爲菜單系統編寫一個相當複雜的面向對象模型。以編程方式創建django模型

最近我考慮過允許管理員創建'build_menu'對象的想法。

理想的情況是將輸入提供一個名稱,一旦創建了菜單將有:

  • 通話的Django的startApp菜單
  • views.py,models.py和admin.py從副本菜單的應用程序,與類名替代類名
  • 追加到urls.py中,以包括「菜單」
  • 追加「.prefix_menu」到新的領域INSTALLED_APPS settings.py中
  • 蟒蛇manage.py執行syncdb
  • pkill的蟒蛇(Dreamhost上所以我需要重新啓動的過程中在屏幕上看到新的變化)

顯然沒有通用的實施,會爲我做這件事,但更大的問題是:這可能嗎?是否可以將這些命令寫入腳本以便從服務器端執行,並且在django管理站點上創建新的「build_menu」對象後,讓它運行該腳本,然後在完成時刷新頁面?或者這是我無法從管理網站做的事情?

+0

你或許可以編寫這樣一個腳本,從掛在管理站點的自定義視圖運行。但是,它真的是你想要做的嗎?我非常*強烈考慮重新構建層次結構,以便可以從數據庫完成這種事情,而不是從服務器端修改代碼。 (如果出現問題 - 並且使用文件系統和網絡服務器以及代碼生成等等,任何事情都可能出錯 - 您可能會損壞整個網站,直到有人進來並手動修復事情。) – Dougal 2012-01-27 19:53:24

+0

我同意,我知道這是不是最好的方式去做,但我試圖找出如何改變實現,使其以django fied的方式工作。 – 2012-01-27 21:29:20

回答

1

一個快速,哈克方法,讓他們展現出來單獨的管理將是:

  • 請與charfield屬性type_name AA單模型,斯內德建議
  • 添加type_namelist_filter屬性模型管理的
  • Override the relevant template列出的type_name的獨特價值與鏈接到相應的頁面過濾

這有一些相當明顯的問題(例如,在保存一個對象之後,它會將你帶回未經過濾的編輯頁面),但是你可以重寫管理列表視圖,也可以使用其他一些管理功能來完成你想要的功能 - 無需修改代碼。

+0

這就是我一直在尋找的東西,我不知道如何實現Ned的答案,以獲得我需要的管理界面。它允許我保留所有的功能,而不用重複代碼,這是一種不好的做法。謝謝! – 2012-01-29 18:58:52

3

也許我不明白你想要完成什麼,但對我來說似乎沒有多大意義。爲什麼複製views.py等,如果他們沒有修改?你會得到N份相同代碼的副本,沒有意義。這聽起來像你想要一個模型與一個額外的name列,而不是N個模型。

+0

我認爲這可能有效,但我需要所有同名的表格在管理界面中可視化地分離,這可能嗎? – 2012-01-27 21:29:50

+0

爲什麼你需要你的用戶使用管理界面? – 2012-01-27 21:32:17

+0

我需要從管理端創建全新的菜單,基本上我需要相同的數據庫結構,但沒有數據,因此可以創建一個新的菜單。 – 2012-01-27 21:47:54