2011-07-12 44 views
2

我有一個很長的forms.py,我想將它拆分成更小的部分,儘可能少的代碼更改。Django:在幾個文件中拆分forms.py

任何想法?

+0

你有什麼特別的問題?爲什麼這很難? –

+0

答案顯然很簡單。我知道分裂views.py可能有點混亂,所以我問,因爲我不知道是否有任何捕獲。 – Max

回答

2

我們把Django窗體類放入forms.py文件的主要原因是慣例。它使其他人可以輕鬆查看您的應用程序,並瞭解他或她在任何給定文件中會找到哪些類型的內容。遵守慣例是很好的,但這不是法律,你可以隨意組織你的代碼。

這是我會怎麼做:

首先,看看你是否可以通過分解出重複碼減少代碼量。常見的驗證邏輯可以被拉入custom validators。共享字段或功能的表單可以從共同父項繼承。

如果您已經創建了自定義字段類,可以將所有這些文件分隔到應用程序目錄中名爲formfields.py的文件中,並將它們簡單地導入forms.py。同樣,如果你有自定義驗證器,你可以將它們取出並導入它們。

如果這些都不足以減少足夠的文件大小,我會按功能將我的表單類分成幾個文件,例如, forms_user.pyforms_products.pyforms_data_entry.py或其他。這樣,我們在給定文件中找到的東西仍然很明顯。無論您的舊錶格被引用到哪裏,您都必須更改導入語句,但這些應該是必需的唯一更改。

+0

這是個好主意。我現在正在考慮這個問題。我想過的一個想法是在每個模塊中都有一個'forms.py',但這似乎與Django-ish相反,所以我正在考慮使用這些其他想法...... – nicorellius

8

我不能評論,所以我正在寫答案。你可以做的另一件事是創建一個forms 目錄中的應用程序目錄(記住__init__.py),並分割你的形式formone.py,form2.py,...

然後你可以導入表單這樣from myapp.forms.formone import FormOne

還是在__init__.py您可以將代碼:

from formone import * 
from form2 import * 

你還可以用from myapp.forms import FormOne

0

導入表單如果你真的想盡可能少地做出改變,通過函數(forms_user.py,forms_product.py)將forms.py分割成多個文件是最簡單的。

如果您有時間重構或開始一個新項目,最好的解決方案是爲您的項目的每個組件(例如用戶,項目......)製作一個新的django應用程序,每個組件都有自己的forms.py文件。如果一個django應用程序變得太大,很多事情都會停止縮放(models.py,views.py等),並且維護變得越來越困難。