수확-개 단어는 수확 스택 응용 프로그램은 어휘와 같은 모델을 정의하고 계층 적 자기 관련 데이터에 대한 해당 인덱스를 구축하기위한 추상적 인 모델을 제공합니다.
예를 들어, 당신이 ICD9 코드를 저장하기위한 모델을 정의 할 수있는 방법입니다 :
vocab.models에서 가져 AbstractItem, AbstractItemIndex
클래스 진단 (AbstractItem) :
& NBSP; 설명 = models.CharField (MAX_LENGTH = 50)
& NBSP; 코드 = models.CharField (MAX_LENGTH = 10)
& NBSP; 부모 = models.ForeignKey ( '자기', related_name = '아동')
ICD9 코드는,이 만 조회 367 있지만, 모든 하위 진단뿐만 아니라 (이 포함 안 계층 적 내가 질문을 할 때 따라서, "367 (굴절과 숙박 시설의 장애) ICD9의 진단을 줘 모든 환자"입니다 다른 2 단계).
만, 특정 진단의 바로 상위에 액세스 할 수 따라서 쿼리가 다음과 같을 것이기 때문에 이런 종류의 질의는 작성하기 어려워진다.
django.db.models 수입 Q에서
Diagnosis.objects.filter (Q (코드 = '367') | Q (parent__code = '367'))
여기에 분명한 문제가 아래로 '367'에서 어떤 진단 2+ 수준이 포함되지 않은 것입니다.
플랫 색인 만들기
이 문제를 완화하기 위해, AbstractItemIndex 서브 클래스는 AbstractItem 서브 클래스에 평평한 인덱스를 구축 할 정의 할 수 있습니다. 간단하게 이런 식으로 정의 :
클래스 DiagnosisIndex (AbstractItemIndex) :
& NBSP; 항목 = models.ForeignKey (진단, related_name = 'item_indexes')
& NBSP; 부모 = models.ForeignKey (진단, related_name = 'parent_indexes')
#은 진단에 대한 인덱스를 구축
DiagnosisIndex.objects.index ()
마지막 줄은 알 수없는 깊이의 문제를 완화 계층 구조의 평면 인덱스를 생성합니다. 그래서 지금, 전술 한 바와 같은 문제는 이런 식으로 답변을 얻을 수 있습니다 :
# 항목 중 하나는이 코드 또는 부모 중 하나를이 코드를 있음
조건 = Q (item__code = '367') | Q (parent__code = '367')
item_ids = DiagnosisIndex.objects.filter (조건) .values_list ( 'item__id', 평면 = 참)
진단 = Diagnosis.objects.filter (id__in = item_ids)
이 요구 사항 :
이 파이썬
댓글을 찾을 수 없습니다