sato-vocab on Harvest Stack sovellus tarjoaa abstrakteja malleja määritellään sanastossa kaltaisia malleja ja rakentaa vastaava indeksi hierarkkinen itse liittyviä tietoja.
Esimerkiksi tämä on miten voisit määritellä malleja tallentamiseen ICD9 koodit:
alkaen vocab.models tuoda AbstractItem, AbstractItemIndex
luokan Diagnoosi (AbstractItem):
& Nbsp; kuvaus = models.CharField (MAX_LENGTH = 50)
& Nbsp; code = models.CharField (MAX_LENGTH = 10)
& Nbsp; vanhempi = models.ForeignKey ("itse", related_name = "lapset")
ICD9 koodit ovat hierarkkinen siis kun olen kysymässä, "Anna minulle kaikki potilaat, joilla on diagnoosi ICD9 367 (häiriöt taittuminen ja majoitus)", niin tämä olisi paitsi kyselyn 367, mutta kaikki jälkeläinen diagnoosit sekä (joka sisältää toinen 2 tasoa).
Tällainen kysely tulee vaikea kirjoittaa, koska sinulla on pääsy vain suora vanhempi tietyn diagnoosin, mikä kyselyn näyttää tältä.
alkaen django.db.models tuonti Q
Diagnosis.objects.filter (Q (koodi = '367') | Q (parent__code = '367'))
Ilmeinen ongelma tässä on, että kaikki diagnoosit 2+ tasot alas "367", ei sisälly.
Luo Flat Index
Voit lievittää ongelman AbstractItemIndex alaluokka voidaan määritellä joka rakentaa tasainen indeksi AbstractItem alaluokka. Yksinkertaisesti määritellä näin:
luokan DiagnosisIndex (AbstractItemIndex):
& Nbsp; erä = models.ForeignKey (Diagnosis, related_name = 'item_indexes')
& Nbsp; vanhempi = models.ForeignKey (Diagnosis, related_name = 'parent_indexes')
# Rakentaa indeksi Diagnoosi
DiagnosisIndex.objects.index ()
Viimeinen rivi luo tasainen indeksi hierarkian joka lievittää tuntematon syvyys kysymys. Joten nyt, sama kysymys edellä voidaan vastata tällä tavalla:
# Joko kohde on tämä koodi tai jokin sen vanhemmista on tämän koodin
ehto = Q (item__code = '367') | Q (parent__code = '367')
item_ids = DiagnosisIndex.objects.filter (ehto) .values_list (item__id ", litteä = True)
diagnoosit = Diagnosis.objects.filter(id__in=item_ids)
Requirements:
- Python
Kommentteja ei löytynyt