ani-vocab ay isang Harvest stack app ay nagbibigay ng abstract mga modelo para sa pagtukoy sa bokabularyo-tulad ng mga modelo at pagbuo ng isang katumbas na index para sa hierarchical data sa sarili na may kaugnayan.
Halimbawa, ito ay kung paano mo maaaring tukuyin ang mga modelo para sa pag-iimbak ng ICD9 code:
mula vocab.models-import AbstractItem, AbstractItemIndex
Pagsusuri ng klase (AbstractItem):
& Nbsp; description = models.CharField (MAX_LENGTH = 50)
& Nbsp; code = models.CharField (MAX_LENGTH = 10)
& Nbsp; magulang = models.ForeignKey ('sarili', related_name = 'bata')
ICD9 code ay hierachical samakatuwid kapag nagtanong ako sa mga tanong, "Bigyan mo ako ng lahat ng mga pasyente na may diagnosis sa ICD9 367 (Disorder ng repraksyon at accommodation)", pagkatapos ito ay dapat na hindi lamang query 367, ngunit ang lahat ng descendent diagnoses pati na rin (na kinabibilangan isa pang 2 palapag).
Ang ganitong uri ng query ay magiging mahirap na isulat dahil mayroon ka lamang ng access sa mga direktang magulang ng isang partikular na diagnosis, kaya ang tanong magiging ganito ang hitsura.
mula sa pag-import django.db.models Q
Diagnosis.objects.filter (Q (code = '367') | Q (parent__code = '367'))
Ang halata problema dito ay na ang anumang mga diagnoses 2+ antas pababa mula sa '367' ay hindi kasama.
Lumikha ng isang Flat Index
Upang magpakalma ang isyung ito, maaaring matukoy ang isang AbstractItemIndex subclass na bumuo ng isang flat-index para sa isang AbstractItem subclass. I-define ito tulad nito:
klase DiagnosisIndex (AbstractItemIndex):
& Nbsp; item = models.ForeignKey (Diagnosis, related_name = 'item_indexes')
& Nbsp; magulang = models.ForeignKey (Diagnosis, related_name = 'parent_indexes')
# Build ng index para sa Pagsusuri
DiagnosisIndex.objects.index ()
Bumubuo sa huling linya ng flat index ng hierarchy na alleviates ang hindi kilalang isyu depth. Kaya ngayon, ang parehong tanong nakasaad sa itaas masasagot sa ganitong paraan:
# Alinman ang item ay ang code na ito o isa sa mga ito ay ang mga magulang ay ang code na ito
ang kundisyong = Q (item__code = '367') | Q (parent__code = '367')
item_ids = DiagnosisIndex.objects.filter (kondisyon) .values_list ('item__id', flat = True)
diagnoses = Diagnosis.objects.filter(id__in=item_ids)
Requirements:
- Python
Mga Komento hindi natagpuan