2010-04-09 105 views
11

我正在學習Django,並且我正在嘗試瞭解項目與應用程序中models.py的使用。從教程示例看來,我在應用中包含模型定義,但是當我將這些知識應用於我自己的現有數據庫時,我陷入了困境。Django項目models.py與應用程序models.py

我拿了一個我使用的數據庫(課程的副本),並使用inspectdb將概念模式生成爲django模型。我在項目級完成了這項工作,並假設我可以在該項目的應用程序中使用子模板編寫應用程序。

但推廣本教程,他們在應用程序的model.py中定義模型。如果我這樣做了,我會重複已經在項目級別的模型(或其中的一部分),這看起來像是一個錯誤和維護問題。

那麼,如何在Django風格中使用項目模式(或其中的一部分),而無需在應用程序的models.py中重新定義它?

在此先感謝。

回答

22

不應該有任何理由擁有「項目級模型」(或針對該問題的「項目級別視圖」)。您只需將功能拆分爲單獨的應用程序即可。

假設你正在爲一所學校設計一個內聯網網站。你會有一個應用程序處理學生的帳戶,另一個應用程序生成時間表,另一個應用程序生成時間表,另一個應用程序生成內部留言板等。每個應用程序定義自己的模型(沒有「項目級模型」),但應用程序可以導入每個其他模型(所以留言板帖子可以有一個ForeignKey字段指向學生從「學生」應用程序)。

James Bennett's "writing reusable Django applications" presentation見從2008年DjangoCon

+0

非常有趣和教育性的談話! James還提到worldonline網站只有'settings.py'和'urls.py'。其餘的是可重用的應用程序在Apache的Python路徑。 – vdboor 2010-08-08 13:46:32

3

Django模型只能駐留在應用程序中,而不能駐留在項目本身中。默認情況下,manage.py inspectdb輸出models.py文件的內容,由您決定是否放在正確的位置。

在你的情況下,將整個事物放在一個應用程序中並稍後將其分解到它有意義的地方會更容易。

我不確定當前版本的狀態是什麼,但是在包中有models模塊之前,表明這是django應用程序,可以放在INSTALLED_APPS列表中。

5
  • 模型只能一次一個Django項目

  • 模型需要在應用中存在的項目下定義

  • 您可以通過導入其他應用程序的模型

  • 如果您需要「添加」到現有的模型,它可以繼承(見:multi table inheritance)。這很簡單,但如果你剛剛開始,你可能想稍後離開。