2011-04-04 34 views
0

我有多個Django應用程序,並且我的一個models.py中有一些代碼確實適用於所有應用程序。有沒有辦法將它移到某個特定應用程序文件夾以外的通用位置?的非應用程序專用碼Django - 非應用程序特定的models.py?

例I具有:

def update_groups(sender, user=None, ldap_user=None, **kwargs): 
    ... 

django_auth_ldap.backend.populate_user.connect(update_groups) 

的函數正確地識別用戶,並連接到正確的信號。

我還有一個模型代理django.contrib.admin.models.LogEntry和該模型代理的modelAdmin,以便管理員站點中的用戶可以查看更改歷史記錄。但是這些不屬於任何一個應用程序的models.py。

回答

0

__init__.py在我的項目目錄中似乎是放置這個東西的好地方。它在服務器啓動時馬上運行,因此它可用於其他任何事情。它似乎迄今工作正常。

2

那麼,只需在項目中的某個地方創建一個python模塊,然後在模型中對其進行引用。要做到這一點,你需要__init__.py文件的目錄:

​​

把你的代碼放到functions.py和在其他任何地方,你將能夠:

from helpers.functions import update_groups 
post_save.connect(update_groups) 

模塊名稱是高達當然是你。

+0

這是一個更好的方法,我建議如果你沒有任何你想要擴展的模型。如果你這樣做,創建一個模板應用程序,並使用類層次結構 – tiagoboldt 2011-04-04 13:07:38

+0

這是一個開始,但一個應用程序中的一個模型將調用「post_save.connect(update_groups)」,它會是一種隨心所欲的應用程序。我希望有一個站點範圍內的models.py或其他一些模塊可以提前導入的概念。 – Greg 2011-04-04 13:13:06

+0

@Greg,我認爲自定義模塊是在這種情況下共享代碼的最佳方式。至於信號,你需要指定'sender',當然,那麼Django會知道哪個模型發送了它。 – 2011-04-04 13:15:25

2

您可以創建一個模板應用程序,該應用程序可以被所有其他可以使用該代碼的應用程序使用或擴展(類層次結構)。

+0

這是一個有趣的信息。你能否提供創建模板應用程序的鏈接? – 2011-04-04 13:10:36

+0

這比django本身的軟件設計知識更多,仍然參考以下內容:http://docs.djangoproject.com/en/dev/topics/db/models/#multi-table-inheritance ||| http://docs.python.org/tutorial/classes.html#inheritance ||| http://diveintopython.org/object_oriented_framework/defining_classes.html ||祝你好運 – tiagoboldt 2011-04-04 13:29:44