2011-06-25 98 views
0

我是Django和MVT的新手,所以我很抱歉如果這是一個愚蠢的問題。我查看了一些類似的問題,但我正在尋找一些額外的清晰度,以及我是否試圖做正確的事情。Django,模型和應用程序

下面是我正在處理的簡化版本。假設我正在設計一個Django接口到一個預先存在的數據庫。數據庫是舊的,其他系統向它添加數據。 Django界面將是隻讀的。簡單的結構與4的內容表:

  1. 小工具
  2. 創想(爲簡單起見,每個小部件都有一個造物主)
  3. 客戶
  4. 訂單(客戶多到不少訂單,訂單很多,TO-很多小部件)

我開始創建一個名爲「Widget」的Django應用程序,該應用程序顯示Widget信息併爲數據庫中的所有表創建模型。這很好用,像/ widget/1234這樣的URL我得到了ID爲1234的Widget的信息,來自Creator表的信息以及它已經訂購了多少次。

現在我想創建一個名爲「Customer」的應用程序,它顯示客戶的信息(客戶表中的數據,下達的訂單,訂購的小部件等)。

我做錯了什麼嗎?是否應該有一個單獨的「客戶」應用程序?

如果確實有一個獨立的「客戶」應用程序是有意義的,我該如何處理這些模型?它們與「Widget」應用程序中使用的模型相同,因爲它們處理同一數據庫中的相同表格。我只是從其他應用程序導入?謝謝!

回答

3

不,你不需要爲每個模型創建一個單獨的應用程序。您應該爲您的項目中的每個不同的功能創建一個應用程序。既然你只是在學習,你應該創建一個應用程序(使用你的項目名稱)並使用它來學習。

至於模型,它們只是數據庫中表的表示層,它使得它很容易,並處理很多與你的數據庫交互相關的繁重工作。所以在你的情況下,你會爲​​現有的數據庫中的每個表創建一個模型:Widget,Creator(你可能想要考慮把它作爲你的用戶表的外鍵鏈接)Customer,Order。

您返回特定數據的方式是通過您的意見。因此,例如,要在您的示例中使用url獲取特定窗口小部件的所有數據,url/widget/1234將指向您的views.py頁面上的一個函數,您將在其中查詢您的數據庫以獲取所需信息,然後發送它到你的模板。在您的例子查詢看起來是這樣的:

widget = Widget.objects.get(id=1234) 

需要注意的是,因爲你有一個現有的數據庫,你將不得不重寫Django默認的數據庫命名約定。你可以在這裏閱讀更多關於如何做到這一點:https://docs.djangoproject.com/en/dev/topics/db/models/

然而,我可以給你的最好的建議是將你自己的項目/應用程序擱置幾天,並通過正式的Django教程和文檔。特別是當你第一次學習,其令人難以置信的有據可查的,簡單易學:

https://docs.djangoproject.com/en/dev/

+0

我有我的模型定義,完整的ForeignKeys等,多虧了「manage.py inspectdb」命令,也有添加幾個db_column和related_name參數,但都很好。所以,我有/ widget/1234從多個表中拉出數據並使用模板輸出。我想我不確定的事情是什麼時候功能應該移到新的應用程序?即,如果到目前爲止我的應用程序中有純粹的「Widget」面向的頁面(小部件搜索,小部件詳細信息視圖),並且我想要「面向客戶」和「訂購」的頁面,那麼應保留在同一個應用程序中或做一個新的?相同的型號。 – Raolin

+0

並感謝您的答案,順便說一句! – Raolin

+0

我明白了,聽起來你比我想象的要遠得多。您應該創建新應用的標準不取決於頁面的類型,因爲該頁面的視圖很容易處理。相反,根據文檔,應用程序是「執行某項操作的Web應用程序 - 例如,Weblog系統,公共記錄數據庫或簡單的投票應用程序。」所以如果你有一個非常簡單的應用程序,它看起來像你可能有,你真的只需要一個應用程序。 –

相關問題