2016-03-30 19 views
0
class PlannedOTList(models.Model): 
    patient = models.ForeignKey(Patient, on_delete=models.CASCADE) 
    date_added = models.DateTimeField(auto_now_add=True) 
    planned_surgery = models.TextField(verbose_name='diagnosis and planned surgery', blank=True) # decided by the committee 
    planned_date_of_surgery = models.DateField('date of surgery', null=True, blank=True) 
    planned_date_of_admission = models.DateField('date of admission', null=True, blank=True) 
    remarks = models.TextField(blank=True) 
    surgery_set = models.BooleanField('required surgery set', default=False) 
    # to_be_admitted = models.BooleanField(default=False) 
    hide = models.BooleanField(default=False) 
    objects = PlannedOTListQS.as_manager() 

    class Meta: 
     db_table = 'planned_ot_list' 
     ordering = ['-date_added'] 

class Admission(models.Model): 
    # general info 
    date_admission = models.DateTimeField(auto_now_add=True) 
    modified = models.DateTimeField(auto_now=True) 
    patient = models.ForeignKey(Patient, on_delete=models.CASCADE) 


class OperationNotesList(models.Model): 
    admission=models.ForeignKey(Admission,on_delete=models.CASCADE,null=True) 
    #patient=models.ForeignKey(Patient,on_delete=models.CASCADE) 
    date_added=models.DateTimeField(auto_now_add=True) 
    procedure_code=models.CharField(max_length=7) 
    diagnosis_code=models.CharField(max_length=10) 
    created_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, null=True, related_name='op_created_by') 
    pre_operation_list=models.CharField(max_length=70,blank=True) 
    intra_operation_list=models.CharField(max_length=70,blank=True) 
    post_operation_list=models.CharField(max_length=70,blank=True) 
    is_done=models.BooleanField(default=False) 

    class Meta: 
     db_table='operationNotesList' 

class Patient(models.Model): 
    patientid_generated_part = models.CharField(max_length=5, default='', blank=True) 
    date_recorded = models.DateTimeField(default=timezone.now) 
    modified = models.DateTimeField(auto_now=True, null=True) 
    first_name = models.CharField(max_length=50) 

    class Meta: 
     db_table = 'patients' 
     ordering = ['-modified'] 

HTML Kod birkaç tablolardan alanları almak:Django şablonunda

<div class="row"> 
    <div class="col-xs-6 col-md-3"><label >Proposed Operation: &nbsp 
    {{ operationnoteslist.admission.patient.planned_ot_list.planned_surgery }}</label></div> 
    <div class="col-xs-6 col-md-3"><label >Weight: &nbsp 
    {{ operationnoteslist.admission.weight }}&nbsp(kg)</label></div> 
    <div class="col-xs-6 col-md-3"><label >Height: &nbsp 
    {{ operationnoteslist.admission.height }}&nbsp(cm)</label></div>  
    <div class="col-xs-6 col-md-3"><label >BMI: &nbsp 
    {{ operationnoteslist.admission.bmi }}</label></div> 
</div> 

html kodu yukarıdaki ana modeli operationnoteslist sahiptir. planlı_ot_list'den değerler almaya çalışıyorum. Ne eksik olduğumu bilmiyorum.

ben gitmek için bir yoldur düşündüm: MyownModelTable.foreignTablename.foreignTablename.field

Önerilen işlem herhangi değerleri almak etmez.

+1

Hasta modelinizde 'plan_ot_list 'alan/yabancı anahtarınız yok. Bu nedenle verileriniz istisna oluşturmuyor. – v1k45

+0

OOH duh :) Şerefe – abedo

cevap

0

(yorumuna cevap olarak: Patient modelinde bir planned_ot_list gerek yoktur.)

Ters ilişkiler (birçok biri) bir _set eki varsayılan olarak var. Ayrıca, PlannedOTList modelinizde hasta unique bayrağına sahip değildir, bu yüzden hasta bunlarla ilgili olanlardan birkaçına sahip olabilir. Ve üstelik, küçük harfle model ilişki isminin alt çizgilerine sahip olmadığı (deve kasasının basitçe daha az kasalı olduğu). Yani ters ilişki adı olmalıdır:

patient.plannedotlist_set 

(Sen dir(patient) kullanarak mevcut özellikleri yazdırabilirsiniz, çıkış ters ilişki özelliklerini içerecektir.)

Bu sorgu yöneticisi döner ve sadece yazamazsınız patient.plannedotlist_set.planned_surgery. Bunun yerine, tam listenin veya girdilerin yalnızca birinin görüntülenip görüntülenmeyeceğine karar vermelisiniz. doğal bir düzen var ve ilk veya son kullanmak istiyorsanız, bunu yapabilirsiniz:

patient.plannedotlist_set.first # in the template or first() in view 
patient.plannedotlist_set.last 

kullanmak hepsini üzerinde yineleme için: PlannedOTList vermelidir

patient.plannedotlist_set.all # template or all() in view 

Not

Meta: 
    ordering = ('field1', 'field2', ...) # use '-field1' for reverse 

Veya, sipariş görünümünde görünümü, düzenin bağımlı olup olmadığını ve açıkça şablon bağlamına listesine ekleyin: bir sipariş, ya böyle bir meta özelliği ekleyerek bu işi yapmak için.

İlgili konular