2017-07-02 89 views
0

訪問的陣列在內部for循環下面的代碼不工作如何使用外循環計數器在內部循環

<tbody> 
    {% for rec in medrec %} 

    <tr> 
     <td>{{ forloop.counter }}</td> 
     <td>{{ rec.date }}</td> 
     <td>{{ rec.disease }}</td> 
     <td>{{ rec.treatment }}</td> 
     <td> {% for n in medicine.forloop.parentforloop.counter0 %} 
     {{ n.medicine }} 
     {% endfor %} 
     </td> 
    </tr> 
    {% endfor %} 
    </tbody> 

上面的代碼生成的表。每個rec都有一系列藥物。 與rec.forloop.counter類似,其中forloop.counter == 1將在藥物數組索引[0]中存在對象。 我如何打印?

def profile(request,rid): 

    patient = Patient.objects.get(pk=rid) 
    medic = MedicalRec.objects.filter(patient=patient) 
    i=0 
    a=[] 
    for n in medic: 
     a.append(medicine.objects.filter(Rec= n)) 
     print(a) 
    if patient: 
     return render(request,'patient.html',{ 
      'medrec' : medic, 
      'pat' : patient, 
      'medicine' : a 
     }) 
    else: 
     return 'patient not found' 

模型

from django.db import models 

# Create your models here. 

class Patient(models.Model): 
    name = models.CharField(max_length=100) 
    age = models.IntegerField() 
    address = models.TextField() 
    contact = models.CharField(max_length=15) 
    def __str__(self): 
     return self.name 

class Stock(models.Model): 
    name = models.CharField(max_length=100) 
    quantity = models.IntegerField() 
    expiry = models.DateField() 
    price = models.IntegerField() 
    def __str__(self): 
     return self.name 

class MedicalRec(models.Model): 
    patient = models.ForeignKey(Patient) 
    date = models.DateField() 
    disease = models.TextField() 
    treatment = models.TextField() 
    medicine = models.ForeignKey(Stock) 
    def __str__(self): 
     return str(self.date) 

class medicine(models.Model): 
    Rec = models.ForeignKey(MedicalRec,related_name='med_set') 
    medicine = models.ForeignKey(Stock) 
    def __str__(self): 
     return str(self.Rec.date) 

class Billing(models.Model): 
    name = models.ForeignKey(Stock) 
    rate = models.IntegerField() 
    Date = models.DateField() 
    def __str__(self): 
     return self.id 

回答

1

您不必自己創建列表。 Django爲您創建reverse relation。它將被命名爲medicine_set,但是現在,您顯示的模型已被覆蓋爲med_set。所以你不必在你的視圖中創建一個列表。您可以使用相關的管理者在你的模板:

觀點:

def profile(request, rid): 
    patient = get_object_or_404(Patient, pk=rid) 
    medic = MedicalRec.objects.filter(patient=patient) 
    return render(request, 'patient.html', { 
     'pat': patient, 
     'medrec': medic, 
    }) 

模板:

<tbody> 
    {% for rec in medrec %} 
     <tr> 
      <td>{{ forloop.counter }}</td> 
      <td>{{ rec.date }}</td> 
      <td>{{ rec.disease }}</td> 
      <td>{{ rec.treatment }}</td> 
      <td> 
       {% for medicine in medrec.med_set.all %} 
        {{ medicine }} 
       {% endfor %} 
      </td> 
     </tr> 
    {% endfor %} 
</tbody> 
+0

沒了..其不working – ilovecse

+0

' {%for rec in medrec%} ​​{{forloop.counter}} ​​{{rec.date}} ​​{{rec.disease}} ​​{{rec.treatment}}在 ​​ {%用於醫藥rec.med_set.all%} {{medicine.medicine}},{ %ENDFOR%} {%ENDFOR%} ' – ilovecse

+0

沒錯。將模型添加到問題中,從那裏我們可以看到您已覆蓋related_name。 – Melvyn

0

我修改了梅爾文的答案和它的工作

<tbody> 
    {% for rec in medrec %} 
     <tr> 
      <td>{{ forloop.counter }}</td> 
      <td>{{ rec.date }}</td> 
      <td>{{ rec.disease }}</td> 
      <td>{{ rec.treatment }}</td> 
      <td> 
       {% for medicine in rec.med_set.all %} 
        {{ medicine.medicine }}, 
       {% endfor %} 
      </td> 
     </tr> 
    {% endfor %} 
</tbody> 
相關問題