در برداشت-vocab است یک برنامه برداشت پشته فراهم می کند مدل انتزاعی برای تعریف مدل مانند واژگان و ساخت یک شاخص مربوطه برای داده های مربوط به خود سلسله مراتبی.
به عنوان مثال، این است که چگونه شما می توانید مدل برای ذخیره سازی کدهای ICD9 تعریف:
از vocab.models وارد AbstractItem، AbstractItemIndex
تشخیص کلاس (AbstractItem):
و nbsp؛ توضیحات = models.CharField (MAX_LENGTH = 50)
& nbsp؛ از کد = models.CharField (MAX_LENGTH 10 =)
& nbsp؛ از پدر و مادر = models.ForeignKey ('خود'، related_name = 'کودکان')
کد ICD9 hierachical بنابراین زمانی که من سوال بپرسید، "به من بده همه بیمارانی که تشخیص در ICD9 367 (اختلالات شکست و محل اقامت)"، پس از این نه تنها باید پرس و جو 367، اما همه تشخیص نزولی نیز (که شامل هستند 2 سطح دیگر).
این نوع از پرس و جو دشوار به ارسال می شود از شما تنها دسترسی به پدر و مادر مستقیم از تشخیص خاص، در نتیجه پرس و جو می شبیه به این.
از django.db.models واردات Q
Diagnosis.objects.filter (Q (کد = '367') | Q (parent__code = '367'))
مشکل آشکار در اینجا این است که سطح هر تشخیص 2+ را از '367' را شامل می شوند نیست.
یک نمایه تخت
برای کاهش این مسئله، یک زیر گروه از AbstractItemIndex را می توان تعریف خواهد شد که شاخص مسطح برای یک زیر گروه از AbstractItem ساخت. به سادگی آن را مانند این تعریف:
کلاس DiagnosisIndex (AbstractItemIndex):
& nbsp؛ در مورد = 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'، تخت = واقعی)
تشخیص = Diagnosis.objects.filter (id__in = item_ids)
مورد نیاز:
پایتون
نظر یافت نشد