cosecha vocabulario es una aplicación de cosecha Pila ofrece modelos abstractos para la definición de modelos de vocabulario similar y la construcción de un índice correspondiente a los datos auto-relacionados jerárquicos.
Por ejemplo, así es como se podría definir modelos para almacenar códigos ICD9:
desde vocab.models importar AbstractItem, AbstractItemIndex
clase Diagnóstico (AbstractItem):
& Nbsp; descripción = models.CharField (max_length = 50)
& Nbsp; code = models.CharField (max_length = 10)
& Nbsp; parent = models.ForeignKey ("yo", related_name = "niños")
ICD9 códigos son jerárquicas, por lo tanto cuando hago las preguntas, "Dame todos los pacientes que tienen un diagnóstico en ICD9 367 (Trastornos de la refracción y alojamiento)", entonces esto debe no sólo consulta 367, pero todos los diagnósticos descendientes, así (que incluye otros 2 niveles).
Este tipo de consulta se hace difícil escribir ya que sólo tienen acceso a la matriz directa del un diagnóstico en particular, por lo que la consulta se vería así.
desde django.db.models importación Q
Diagnosis.objects.filter (Q (código = '367') | Q (parent__code = '367'))
El problema obvio es que cualquier diagnóstico 2+ niveles por debajo de '367' no están incluidos.
crear un índice plana
Para aliviar este problema, una subclase AbstractItemIndex se puede definir que construirá un índice plana para una subclase AbstractItem. Basta con definir así:
clase DiagnosisIndex (AbstractItemIndex):
& Nbsp; item = models.ForeignKey (Diagnóstico, related_name = 'item_indexes')
& Nbsp; parent = models.ForeignKey (Diagnóstico, related_name = 'parent_indexes')
# Construye el índice de Diagnóstico
DiagnosisIndex.objects.index ()
La última línea genera un índice plano de la jerarquía que alivia el problema profundidad desconocida. Así que ahora, la misma pregunta se ha dicho se puede responder de esta manera:
# O bien el artículo tiene este código, o uno de sus padres ha de este código
condición = Q (item__code = '367') | Q (parent__code = '367')
item_ids = DiagnosisIndex.objects.filter (condición) .values_list ('item__id', plana = True)
diagnósticos = Diagnosis.objects.filter(id__in=item_ids)
Requirements:
- Python
Comentarios que no se encuentran