συγκομιδή-vocab είναι ένα app Harvest Stack παρέχει θεωρητικά μοντέλα για τον καθορισμό του λεξιλογίου, όπως τα μοντέλα και την οικοδόμηση μιας αντίστοιχος δείκτης για την ιεραρχική αυτο που σχετίζονται με τα δεδομένα.
Για παράδειγμα, αυτό είναι το πώς θα μπορούσαμε να ορίσουμε τα μοντέλα για την αποθήκευση των κωδικών ICD9:
από vocab.models εισαγωγή AbstractItem, AbstractItemIndex
Διάγνωση κατηγορία (AbstractItem):
& Nbsp? Περιγραφή = models.CharField (MAX_LENGTH = 50)
& Nbsp? Κωδικός = models.CharField (MAX_LENGTH = 10)
& Nbsp? Γονέα = models.ForeignKey («εαυτού», related_name = «παιδιά»)
Κωδικούς ICD9 είναι ιεραρχική, συνεπώς, όταν ζητώ τις ερωτήσεις, "Δώσε μου όλοι οι ασθενείς οι οποίοι έχουν μια διάγνωση σε ICD9 367 (Διαταραχές της διάθλασης και διαμονή)", τότε αυτό θα πρέπει όχι μόνο ερώτημα 367, αλλά όλα διαγνώσεις απόγονος, καθώς και (η οποία περιλαμβάνει άλλα 2 επίπεδα).
Αυτό το είδος του ερωτήματος είναι δύσκολο να γράψω αφού έχετε πρόσβαση στην άμεση μητρική του συγκεκριμένου διάγνωση μόνο, έτσι το ερώτημα θα μοιάζει με αυτό.
από django.db.models εισαγωγή Q
Diagnosis.objects.filter (Q (κωδικός = "367") | Q (parent__code = '367'))
Το προφανές πρόβλημα εδώ είναι ότι οποιαδήποτε διαγνώσεις 2+ επίπεδα κάτω από το «367» δεν περιλαμβάνονται.
Δημιουργήστε μια επίπεδη Δείκτης
Για την αντιμετώπιση αυτού του ζητήματος, μια AbstractItemIndex υποκατηγορία μπορεί να ορίζεται το οποίο θα χτίσει μια επίπεδη δείκτη για την υποκατηγορία AbstractItem. Απλά να την ορίσουμε σαν αυτό:
κατηγορία DiagnosisIndex (AbstractItemIndex):
& Nbsp? Item = models.ForeignKey (Διάγνωση, related_name = 'item_indexes »)
& Nbsp? Γονέα = models.ForeignKey (Διάγνωση, related_name = 'parent_indexes »)
# Χτίζει το δείκτη για διάγνωση
DiagnosisIndex.objects.index ()
Η τελευταία γραμμή δημιουργεί μια επίπεδη δείκτη της ιεραρχίας που ανακουφίζει το άγνωστο θέμα βάθος. Μέχρι τώρα, το ίδιο ερώτημα αναφέρεται παραπάνω, μπορούν να απαντηθούν με αυτόν τον τρόπο:
# Είτε το στοιχείο έχει αυτόν τον κώδικα ή ένας από τους γονείς που έχει αυτόν τον κώδικα
κατάσταση = Q (item__code = '367') | Q (parent__code = '367')
item_ids = DiagnosisIndex.objects.filter (κατάσταση) .values_list («item__id», επίπεδη = True)
διαγνώσεις = Diagnosis.objects.filter(id__in=item_ids)
Requirements:
- Python
Τα σχόλια δεν βρέθηκε