2015-09-10 130 views
0

基線:我正在構建一個基於django的應用程序,該應用程序嚴重使用管理界面,因爲它爲開發自己的CRUD例程提供了大量工作。到目前爲止,我遇到過幾種情況,我有一些模型可以保存一些一般信息(如父母),並且經常與派生模型(比如孩子)有外鍵關係。django編程 - 管理,模型或視圖中的「創建」方法

我意識到我有時實現了我的例程來在管理類中創建子對象,有時在模型類(從某些管理例程中調用方法)中,有時甚至在視圖類中調用(例如,對POST一些自定義表單上的請求)。現在感覺,我的設計不是很一致(改變一些模型參數分佈在很多文件中的效果),我應該在它變得一團糟之前重構。

那麼最好的方法是什麼?在哪裏應該集中創建/修改相關對象的方法(請記住,我經常想給出一些與流程相關的反饋信息)?

回答

0
  • 如果您的代碼是關於Model類,請將其添加到models.py。當必須將類添加到數據庫時,這是有意義的(migrations
  • 如果您的代碼與views相關,請將其附加到views.py。代碼處理請求時這很有意義。
  • 如果您的代碼與admin相關,請將其附加到admins.py。代碼與管理界面相關時,這是有意義的。
  • 如果你的代碼是通用的,在多個地方使用,refactor它變成一個單獨的文件,而import那個文件在其他地方。

你的使用情況是不完全清楚,我,所以我在這裏走在黑暗中刺 - 你可以有Modelsmodels.py並創建一個單獨的文件中創建包含子對象的模型對象該代碼與創建具有給定數據的父子對象有關。然後在適用的情況下將其用作管理員和視圖中的導入。

喜歡的東西:

# foo in views.py and admin.py 
def foo(): 
    data = {} # get all data 
    make_parent_child(data) # create parent-child objects 
+0

我將解釋你的想法一樣:內的所有確定並收集與您的實際分配對象創建/更新的地方,實際上需要處理的數據,並把實際做的所有方法工作成一個(新)文件。我傾向於直接將它們作爲模型類方法,但有點害怕我的模型類會包含模型通常不知道的一些對象引用(如request或admin,我需要這些引用來觸發某些消息以供用戶)。 – ecp

+0

我認爲只要有一個確定的結構和原因,在類中使用與模型有關的所有方法都是很好的,並且它不會太亂。如果類中的方法太多,那麼可以將它們重構爲單獨的文件。如果方法中存在太多重複,請考慮抽象方法,以便將它們用於多個模型。 – kicker86