2017-08-17 23 views
-1

我應該如何在我的模板中創建for循環,以便顯示ManyToMany關係?ManytoMany字段類型的循環

鑑於:

在models.py我

class Cycle(models.Model): 
    cycle_name = models.CharField(max_length=150) 
    cycle_description = models.CharField(max_length=250) 

    def __str__(self): 
     return self.cycle_name + " -- " + self.cycle_description 

class Program(models.Model): 
    program_name = models.CharField(max_length=50) 
    program_description = models.CharField(max_length=250) 
    cycles = models.ManyToManyField(Cycle) 
    is_favourite = models.BooleanField(default="False") 

    def get_absolute_url(self): 
     return reverse('programs:program', kwargs={'pk': self.pk}) 

    def __str__(self): 
     return self.program_name 
在views.py

class AllProgramsView (generic.ListView): 
    template_name = 'programs/index.html' 
    context_object_name = 'programs_list' 

    def get_queryset(self): 
     return Program.objects.all() 

class ProgramDetailView (generic.DetailView): 
    model = Program 
    template_name = 'programs/program.html' 

在urls.py

#list of all programs 
url(r'^$', views.AllProgramsView.as_view(), name='index'), 

#single program page 
url(r'^(?P<pk>[0-9]+)/$', views.ProgramDetailView.as_view(), name='program'), 

在單個程序我需要列出所有的週期包含在該特定程序中。

我一直在嘗試這麼多不同的東西,但似乎沒有一個是正確的。 這是我目前採取的模板,但是不工作:

program.html

<div class="bg-white"> 
    <div class="container text-center text-muted"> 
    <div class="row"> 
    {% if cycle %} 
      {% for cycle in program.cycles.all() %} 
     <div class="col-sm-4 py-4"> 
     <div class="card"> 
     <p><h5>{{ cycle.cycle_name }}</h5></p> 
     <p class="card-text">{{ cycle.cycle_description }}</p> 
     <a href="" class="btn btn-secondary">Modify it</a> 
     </div> 
    </div> 
      {% endfor %} 
    {% else %} 
     <div class="col-sm-12"> 
      <p>No cycles found</p> 
     </div> 
    {% endif %} 
    </div> 
</div> 

有人幫助,好嗎?謝謝。

回答

1

我認爲你沒有得到上下文,因爲if語句是錯誤的。 而不是

{% if cycle %} 

應該

{%如果program.cycles%}

+0

是的!這使它工作!非常感謝你@peterpanx – Giulia

+0

歡迎你。我很高興我的幫助。 – Peterpanx