2016-06-19 2 views
2

Django의 경우 1 가지 작업 만 수행하고 1 가지 작업을 수행하는 것이 가장 좋은 방법입니다. 따라서 다른 프로젝트에 "플러그 앤 플레이"할 수 있습니다.Django Apps for Inter-related models을 관리

나는 라이브러리 응용 프로그램이 있고 3 개의 응용 프로그램이 있다고 가정합니다. book, memberloan. 그들 각각은 그들 자신의 모델을 가지고있다. 그래서에서

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') 
     ) 

내 질문

은 다음과 같습니다

  1. from book.models ... 플러그인 할 수있는 능력을 위반하지 않습니다 앱을 재생할까요?
  2. 이 모델을 가져 오는 더 좋은 방법이 있습니까? 그렇게 할 때 모범 사례를 위반합니까?

답변

0

"한 가지 일을하는 앱과 한 가지 올바른 작업"이 하나의 모델 만 있어야한다는 것을 의미하지 않습니다. 라이브러리 응용 프로그램을 작성하는 경우 동일한 응용 프로그램에 book, memberloan 모델이 있어야합니다.

그러나 응용 프로그램 B에서 응용 프로그램 A의 모델을 사용하는 한 가지 가능한 방법은 응용 프로그램 B에서 플러그 가능 설정으로 모델을 정의하는 것입니다. 예를 들어 auth 모듈이 여기에서 무엇을하는지보십시오. https://docs.djangoproject.com/en/1.9/topics/auth/customizing/#substituting-a-custom-user-model

+0

플러그 형 설정은 사실 모델이 실제로는 플러그 형 (사용자 모델과 같은)이어야하는 경우가 많습니다 (이는 소수의 경우 임). 인앱 종속성은 현실적으로 불가능하며, 종속성이없는 경우 모델을 가져 와서 오류가 발생하는 것이 좋습니다. – knbk

+0

@knbk, "일반적인"관행이 아니라는 점에서 정확합니다. 그에 따라 그에 대한 답변도 업데이트되었습니다. 나는 나머지 의견에 동의하지 않지만,이 방법을/다시 주장하는 것은 대답의 범위에 속하지 않습니다. –