panen-vocab adalah aplikasi Harvest Stack menyediakan model abstrak untuk mendefinisikan model kosakata-seperti dan membangun indeks yang sesuai untuk data yang berhubungan dengan diri hirarkis.
Sebagai contoh, ini adalah bagaimana Anda bisa menentukan model untuk menyimpan kode ICD9:
dari vocab.models impor AbstractItem, AbstractItemIndex
Kelas Diagnosis (AbstractItem):
& Nbsp; description = models.CharField (max_length = 50)
& Nbsp; kode = models.CharField (max_length = 10)
& Nbsp; parent = models.ForeignKey ('diri', related_name = 'anak')
Kode ICD9 yang hirarkis sehingga ketika saya mengajukan pertanyaan, "Beri aku semua pasien yang memiliki diagnosis di ICD9 367 (Gangguan refraksi dan akomodasi)", maka ini harus tidak hanya permintaan 367, tapi semua diagnosa keturunan juga (yang mencakup lain 2 tingkat).
Semacam ini permintaan menjadi sulit untuk menulis karena Anda hanya memiliki akses ke orang tua langsung dari diagnosis tertentu, sehingga permintaan akan terlihat seperti ini.
dari django.db.models impor Q
Diagnosis.objects.filter (Q (code = '367') | Q (parent__code = '367'))
Masalah yang jelas di sini adalah bahwa setiap diagnosa 2 + tingkat turun dari '367' tidak termasuk.
Buat Index datar
Untuk mengatasi masalah ini, sebuah subclass AbstractItemIndex dapat didefinisikan yang akan membangun indeks datar untuk subclass AbstractItem. Cukup mendefinisikannya seperti ini:
Kelas DiagnosisIndex (AbstractItemIndex):
& Nbsp; item = models.ForeignKey (Diagnosis, related_name = 'item_indexes')
& Nbsp; parent = models.ForeignKey (Diagnosis, related_name = 'parent_indexes')
# Membangun indeks untuk Diagnosis
DiagnosisIndex.objects.index ()
Baris terakhir menghasilkan indeks datar hirarki yang meredakan masalah kedalaman yang tidak diketahui. Jadi sekarang, pertanyaan yang sama disebutkan di atas dapat dijawab dengan cara ini:
# Baik item memiliki kode ini atau salah satu dari orang tua itu telah kode ini
Kondisi = Q (item__code = '367') | Q (parent__code = '367')
item_ids = DiagnosisIndex.objects.filter (kondisi) .values_list ('item__id', flat = True)
diagnosis = Diagnosis.objects.filter(id__in=item_ids)
Requirements:
- Python
Komentar tidak ditemukan