对于django来说,最好的做法显然是只有1件事可以做1件事,然后做1件事...因此,它们可以"插入并播放"到其他项目中
考虑我有一个库应用程序,并且有3个应用程序。book
,member
和loan
。他们每个人都有自己的模型。
因此,在loan
中说forms.py
,我需要做类似的事情:
from book.models import Book
from member.models import Model
from .models import Loan
#Other key imports
class CreateLoanForm(forms.Form):
# Some fields
def save(self):
# Retrieve fields
selected_book = self.cleaned_data.get('selected_book')
selected_member = self.cleaned_data.get('selected_member')
new_loan = Loan(
book=Book.objects.get(id=selected_book),
member=Member.objects.get(id=selected_member),
date_start=self.cleaned_data.get('date_start'),
date_end=self.cleaned_data.get('date_end')
)
我的问题是:
- 上述
from book.models ...
难道不违反插入应用程序的能力? - 是否有更好的方式导入这些模型?这样做时我会违反最佳实践吗?
对于"一个应用程序要做一件事,正确的一件事"并不意味着它只有一个模型。如果您正在编写库应用程序,则应在同一应用中具有book
,member
和loan
模型。
在您问题的背景下,使用应用程序B中使用模型A中的一种可能的做法是将模型定义为App B中的可插入设置。例如,请参见auth
模块在此处做什么:https://docs.djangoproject.com/en/1.9/topics/auth/customizing/#substituting-a-custom-user-model