hasat-vocab bir Hasat Yığın uygulaması kelime-benzeri modeller tanımlayan ve hiyerarşik kendini ilişkili veriler için uygun bir dizin oluşturma için soyut modeller sağlar olduğunu.
Örneğin, bu ICD9 kodları saklamak için modeller tanımlayabilirsiniz nasıl:
vocab.models ithal AbstractItem, AbstractItemIndex
sınıf Tanı (AbstractItem):
& Nbsp; açıklama = models.CharField (max_length = 50)
& Nbsp; code = models.CharField (max_length = 10)
& Nbsp; ana = models.ForeignKey ('öz', related_name = 'çocuk')
ICD9 kodları, o zaman bu sadece sorgu 367, ancak tüm soyundan tanı yanı sıra (ki içerir olmamalıdır hiyerarşik Ben soru sormak bu nedenle, "367 (kırılma ve konaklama Bozuklukları) ICD9 bir tanı var bana ver tüm hastalar" vardır Başka bir 2 düzeyleri).
Eğer sadece belirli bir tanı doğrudan ebeveyne erişimi ve böylece sorgu böyle olmazdı çünkü sorgunun Bu tür yazmak zor olur.
django.db.models ithalat Q
Diagnosis.objects.filter (Q (kod = '367') | Q (parent__code = '367'))
Burada bariz sorun aşağı '367' den herhangi tanılar 2+ düzeyleri dahil değildir olmasıdır.
Düz Endeksi oluşturma
Bu sorunu hafifletmek için, bir AbstractItemIndex alt sınıf bir AbstractItem alt sınıfının bir düz bir dizin inşa edecek olan tanımlanabilir. Basitçe şöyle tanımlıyoruz:
sınıf DiagnosisIndex (AbstractItemIndex):
& Nbsp; madde = models.ForeignKey (Tanı, related_name = 'item_indexes')
& Nbsp; ana = models.ForeignKey (Tanı, related_name = 'parent_indexes')
# Tanı endeksi oluşturur
DiagnosisIndex.objects.index ()
Son satır bilinmeyen derinlik sorunu hafifletir hiyerarşi düz bir dizin oluşturur. Şimdi, yukarıda belirtilen aynı soru bu şekilde cevap olabilir:
# Madde ya bu kodu veya 's ebeveynlerin birini bu kodu vardır vardır
Durumu = Q, (item__code = '367'), | S (parent__code = '367'),
item_ids = DiagnosisIndex.objects.filter (koşul) .values_list ('item__id', düz = true)
tanılar = Diagnosis.objects.filter(id__in=item_ids)
Requirements:
- Python
Yorum Bulunamadı