Ernte vocab ist eine Ernte Stapel App bietet abstrakte Modelle für die Definition von Wortschatz-ähnliche Modelle und den Aufbau einer entsprechenden Index für hierarchische Selbstbezogenen Daten.
Zum Beispiel ist dies, wie Sie Modelle zum Speichern ICD9 Codes definieren:
von vocab.models importieren AbstractItem, AbstractItemIndex
Klasse Diagnose (AbstractItem):
& Nbsp; description = models.CharField (max_length = 50)
& Nbsp; code = models.CharField (max_length = 10)
& Nbsp; parent = models.ForeignKey ("Selbst", related_name = "Kinder")
ICD9 Codes sind hierarchische daher, wenn ich die Fragen stellen: "Gib mir alle Patienten, die eine Diagnose in ICD9 haben 367 (Störungen der Brechung und Unterkunft)", dann sollte dies nicht nur Abfrage 367, sondern alle Nachfahren Diagnosen sowie (was beinhaltet noch 2 Stufen).
Diese Art der Abfrage wird schwierig zu schreiben, da Sie haben Zugriff auf die direkte Muttergesellschaft der eine bestimmte Diagnose nur, damit die Abfrage würde wie folgt aussehen.
von django.db.models Import Q
Diagnosis.objects.filter (Q (Code = '367') | Q (parent__code = '367'))
Das offensichtliche Problem hierbei ist, dass eine Diagnose 2+ Ebenen unterhalb '367' sind nicht inbegriffen.
Erstellen Sie eine Wohnung Index
Um dieses Problem zu mildern, kann ein AbstractItemIndex Unterklasse definiert werden, der mit einem Flachindex für einen AbstractItem Klasse bauen. Definieren Sie einfach so:
Klasse DiagnosisIndex (AbstractItemIndex):
& Nbsp; item = models.ForeignKey (Diagnose, related_name = 'item_indexes')
& Nbsp; parent = models.ForeignKey (Diagnose, related_name = 'parent_indexes')
# Baut den Index für Diagnose
DiagnosisIndex.objects.index ()
Die letzte Zeile erzeugt eine flache Index der Hierarchie, die die unbekannte Tiefe Problem lindert. So, jetzt kann das gleiche oben genannten Frage so beantwortet werden:
# Entweder das Element diesen Code oder einer der es Eltern hat diesen Code
Zustand = Q (item__code = '367') | Q (parent__code = '367')
item_ids = DiagnosisIndex.objects.filter (Bedingung) .values_list ('item__id', Flach = True)
Diagnosen = Diagnosis.objects.filter(id__in=item_ids)
Requirements:
- Python
Kommentare nicht gefunden