2016-08-12 63 views
1

假設我的Django項目有兩個應用程序:App Aapp B。這兩款應用都需要使用10款機型兩個獨立的Django應用程序需要相同的模型

通常的做法是爲模型創建另一個應用程序,並通過App Aapp B導入它?

我知道我可以在App Aapp B中定義它們,如果沒有它們可以從其他應用程序導入它們,但由於某種原因,我很困擾它。對我而言,這兩個應用程序都應該導入一個「所需模型」應用程序,而不是另一個模型。

我是Django的新手,在這種情況下常見的做法是什麼?

回答

4

是的,你可以如果你需要公共模型創建一個名爲utils

一個應用程序,你應該把任何常見的型號,序列化,方法等,在utils/models.py

創建它們如果需要公共職能,創建一個Mixin類實現這個方法utils/mixins.py

我們稱之爲Mixin Class,這是一個python類,你可以在其中放置任何類型的方法以便在你的views/models/serializer中重用它。

而且,這是一個很好的做法在普通的應用程序定義的模型,因爲你能避免循環依賴,如果你在你的app A定義modelX,則導入它在你的app B,如果由於某種原因,app A需要來自app B的某些型號,您將收到循環導入錯誤。

約混入

例子中,我們通常觀看

class MyView(View): 
    redirect_field_name = 'redirect_to' 
    ..... 

比方說,我們希望只允許登錄的用戶得到它。我們只需要輸入登錄所需的混入,並將其添加

from django.contrib.auth.mixins import LoginRequiredMixin 

class MyView(LoginRequiredMixin, View): 
    login_url = '/login/' 
    redirect_field_name = 'redirect_to' 

這邏輯來檢查,如果用戶登錄與否,LoginRequiredMixin類完成。

這也適用於型號,序列器等。

相關問題