2017-07-02 92 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> 
相关问题