harvest-vocab er en Harvest-Stack app gir abstrakte modeller for å definere vokabular-lignende modeller og bygge et tilsvarende indeksen for hierarkiske selvrelaterte data.
For eksempel, dette er hvordan du kan definere modeller for lagring ICD9 koder:
fra vocab.models importere AbstractItem, AbstractItemIndex
klasse Diagnose (AbstractItem):
& Nbsp; description = models.CharField (MAX_LENGTH = 50)
& Nbsp; kode = models.CharField (MAX_LENGTH = 10)
& Nbsp; forelder = models.ForeignKey ('selv', related_name = 'barn')
ICD9 koder er hierarkisk derfor når jeg stiller spørsmålene, "Gi meg alle de pasienter som har en diagnose i ICD9 367 (Disorders brytnings og overnatting)", så dette bør ikke bare spørring 367, men alle underordnede diagnoser i tillegg (som inkluderer ytterligere to nivåer).
Denne typen spørringen blir vanskelig å skrive siden du kun har tilgang til direkte overordnede av en bestemt diagnose, og dermed spørringen vil se slik ut.
fra django.db.models import Q
Diagnosis.objects.filter (Q (kode = '367') | Q (parent__code = '367'))
Det åpenbare problemet her er at eventuelle diagnoser 2 + nivåer ned fra '367' er ikke inkludert.
Create A Flat Index
For å avhjelpe dette problemet, kan en AbstractItemIndex underklasse defineres som vil bygge en flat-indeksen for en AbstractItem underklasse. Bare definerer det slik:
klasse DiagnosisIndex (AbstractItemIndex):
& Nbsp; element = models.ForeignKey (Diagnose, related_name = 'item_indexes')
& Nbsp; forelder = models.ForeignKey (Diagnose, related_name = 'parent_indexes')
# Bygger indeksen for diagnostisering
DiagnosisIndex.objects.index ()
Den siste linjen genererer en flat indeks av hierarkiet som lindrer ukjent dybde problemet. Så nå kan det samme spørsmålet nevnt ovenfor bli besvart på denne måten:
# Enten elementet har denne koden, eller en av sine foreldre har denne koden
tilstand = Q (item__code = '367') | Q (parent__code = '367')
item_ids = DiagnosisIndex.objects.filter (tilstand) .values_list ('item__id', flat = True)
diagnoser = Diagnosis.objects.filter(id__in=item_ids)
Requirements:
- Python
Kommentarer ikke funnet