məhsul-vocab bir Harvest Stack app lüğət kimi modelləri müəyyən və iyerarxik özünü bağlı məlumat üçün müvafiq index tikinti üçün mücərrəd modelləri təmin edir.
Məsələn, bu ICD9 kodları saxlanılması üçün model müəyyən edə bilər necə:
vocab.models idxal AbstractItem, AbstractItemIndex
class Diagnosis (AbstractItem):
& Nbsp; təsviri = models.CharField (max_length = 50)
& Nbsp; code = models.CharField (max_length = 10)
& Nbsp; valideyn = models.ForeignKey (özünə "related_name = 'uşaq)
ICD9 kodları, onda bu yalnız sorğu 367, lakin bütün descendent tanı, eləcə də (hansı daxildir etməməlidir iyerarxik I sual zaman buna görə də, "367 (refraction və yaşayış Bozuklukları) ICD9 bir diaqnoz var ver bütün xəstələr var" başqa 2 səviyyəsi).
Yalnız müəyyən bir diaqnoz birbaşa valideyn etmək imkanı beləliklə sorğu bu kimi görünür çünki sorğu Bu cür yazmaq çətin olur.
django.db.models idxal Q-dən
Diagnosis.objects.filter (Q (kod = '367') | Q (parent__code = '367'))
Burada açıq-aydın problem aşağı '367' hər hansı bir tanı 2 + səviyyəsi daxil deyil ki.
A Flat Index yarat
Bu məsələnin aradan qaldırılması üçün, AbstractItemIndex yarımsinif bir AbstractItem yarımsinif üçün düz index inşa edəcək olan müəyyən edilə bilər. Sadəcə bu kimi müəyyən edir:
class DiagnosisIndex (AbstractItemIndex):
& Nbsp; maddə = models.ForeignKey (Diagnosis, related_name = 'item_indexes)
& Nbsp; valideyn = models.ForeignKey (Diagnosis, related_name = 'parent_indexes)
# Diaqnoz üçün index qurur
DiagnosisIndex.objects.index ()
Son line unknown dərinliyi məsələ aradan qaldırır iyerarxiya düz index yaradır. Belə ki, indi, yuxarıda göstərilən eyni sual bu şəkildə cavab bilər:
# Maddə ya bu kodu və ya elə valideynlərindən birini bu kodu verdi
vəziyyəti = Q (item__code = '367') | Q (parent__code = '367')
item_ids = DiagnosisIndex.objects.filter (vəziyyəti) .values_list (item__id, düz = True)
tanı = Diagnosis.objects.filter(id__in=item_ids)
Requirements:
- Python
Şərhlər tapılmadı