假設我的Django項目有兩個應用程序:App A
和app B
。這兩款應用都需要使用10款機型兩個獨立的Django應用程序需要相同的模型
通常的做法是爲模型創建另一個應用程序,並通過App A
和app B
導入它?
我知道我可以在App A
和app B
中定義它們,如果沒有它們可以從其他應用程序導入它們,但由於某種原因,我很困擾它。對我而言,這兩個應用程序都應該導入一個「所需模型」應用程序,而不是另一個模型。
我是Django的新手,在這種情況下常見的做法是什麼?
假設我的Django項目有兩個應用程序:App A
和app B
。這兩款應用都需要使用10款機型兩個獨立的Django應用程序需要相同的模型
通常的做法是爲模型創建另一個應用程序,並通過App A
和app B
導入它?
我知道我可以在App A
和app B
中定義它們,如果沒有它們可以從其他應用程序導入它們,但由於某種原因,我很困擾它。對我而言,這兩個應用程序都應該導入一個「所需模型」應用程序,而不是另一個模型。
我是Django的新手,在這種情況下常見的做法是什麼?
是的,你可以如果你需要公共模型創建一個名爲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類完成。
這也適用於型號,序列器等。