对于ManytoMany字段类型的循环

时间:2017-08-17 16:34:29

标签: django django-templates django-views

我应该如何在模板中创建for循环,以便显示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 个答案:

答案 0 :(得分:1)

我认为你没有上下文,因为if语句是错误的。 而不是

{% if cycle %}

应该是

  

{%if program.cycles%}