קציר-vocab הוא אפליקציה הקציר Stack מספקת מודלים מופשטים להגדרת מודלים כמו אוצר מילים ובניית מדד מקביל לנתונים הקשורים לעצמיים היררכיים.
לדוגמא, זה איך אתה יכול להגדיר מודלים לאחסון קודי ICD9:
מvocab.models לייבא AbstractItem, AbstractItemIndex
כיתת אבחון (AbstractItem):
& Nbsp; תיאור = models.CharField (MAX_LENGTH = 50)
& Nbsp; קוד = models.CharField (MAX_LENGTH = 10)
& Nbsp; הורה = models.ForeignKey ('עצמי', related_name = 'ילדים')
קודי ICD9 הם hierachical לכן כאשר אני שואל את השאלות, "תן לי את כל החולים שיש להם אבחון בICD9 367 (הפרעות של שבירה ואירוח)", אז זה צריך לא רק שאילתא 367, אבל כל אבחנות הצאצא וכן (הכולל 2 רמות אחרת).
סוג זה של שאילתא הופך להיות קשה לכתוב מאז שיש לך גישה רק להורה הישיר של אבחנה מסוימת, ובכך השאילתה תיראה כך.
מQ יבוא django.db.models
Diagnosis.objects.filter (Q (קוד = '367') | Q (parent__code = '367'))
הבעיה הברורה כאן היא שרמות כל אבחנות 2 + למטה מ '367' אינן כלולות.
צור אינדקס שטוח
כדי להקל על בעיה זו, תת 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', שטוח = True)
= אבחנות Diagnosis.objects.filter(id__in=item_ids)
Requirements:
- Python
תגובות לא נמצא