derliaus-vocab yra Derliaus kamino App suteikia abstrakčius modelius nustatant žodyną panašūs modeliai ir statybos atitinkamą indeksą hierarchinių savarankiškai susijusių duomenų.
Pavyzdžiui, tai, kaip galite nustatyti modelius saugoti ICD9 kodai:
nuo vocab.models importuoti AbstractItem, AbstractItemIndex
klasė diagnostika (AbstractItem):
& Nbsp; apibūdinimas = models.CharField (MAX_LENGTH = 50)
& Nbsp; kodas = models.CharField (MAX_LENGTH = 10)
& Nbsp; tėvų = models.ForeignKey ("savarankiškai", related_name = "vaikai")
ICD9 kodai hierachical Todėl kai prašau į klausimus: "Duok man visi pacientai, kurie turi į ICD9 diagnozę 367 (sutrikimai refrakcija ir apgyvendinimo)", tai turėtų būti ne tik užklausos 367, bet visi palikuonis diagnozės taip pat (kuris apima dar 2 lygis).
Šis užklausą natūra tampa sunku rašyti, nes jūs tik turite prieigą prie tiesioginių tėvų dėl konkretaus diagnozę, todėl užklausa atrodytų taip.
nuo django.db.models importo Q
Diagnosis.objects.filter (Q (kodas = '367') | Q (parent__code = '367'))
Akivaizdi problema yra ta, kad bet kurios diagnozės 2+ lygis sumažėjo nuo "367" nėra įtrauktas.
Sukurti plokščio puslapis
Siekiant sumažinti šią problemą, AbstractItemIndex poklasis gali būti apibrėžta, kuri remsis butas indeksą yra AbstractItem poklasis. Tiesiog ją apibrėžti, kaip tai:
klasė DiagnosisIndex (AbstractItemIndex):
& Nbsp; prekės = models.ForeignKey (diagnostika, related_name = 'item_indexes)
& Nbsp; tėvų = models.ForeignKey (diagnostika, related_name = 'parent_indexes)
# Stato diagnozės indeksą
DiagnosisIndex.objects.index ()
Paskutinė eilutė sukuria plokščią indeksas hierarchijos, kuri lengvina nežinomą gylio klausimą. Taigi dabar pats klausimas nurodyta pirmiau, galima atsakyti šitaip:
# Arba elementas turi šį kodą arba vieną iš jos tėvai jau šį kodą
Būklė = K (item__code = '367') | Q (parent__code = '367')
item_ids = DiagnosisIndex.objects.filter (sąlyga) .values_list (item__id ", plokščias = True)
diagnozuoja = Diagnosis.objects.filter(id__in=item_ids)
Requirements:
- Python
Komentarai nerastas