在我的Django项目中,我有两个模型 - 程序和循环 - 它们是ManyToMany关系的输出,因此一个程序可以有很多循环,同时循环可以是许多不同程序的一部分。
从通用列表视图中,用户可以选择一个程序并访问该程序的详细信息视图,其中我应该显示所选程序中包含的所有周期。
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'
在models.py
中class Cycle(models.Model):
cycle_name = models.CharField(max_length=150)
cycle_description = models.CharField(max_length=250)
steps = models.ManyToManyField(Step)
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
在html模板中,program.html
<div class="bg-white">
<div class="container text-center text-muted">
<div class="row">
{% if cycle %}
{% for cycle in program %}
<div class="col-sm-4 py-4">
<div class="card">
<p><h5>{{ cycles.cycle_name }}</h5></p>
<p class="card-text">{{ cycles.cycle_description }}</p>
<a href="" class="btn btn-secondary">Modify it</a>
</div>
{% endfor %}
{% else %}
<div class="bg-white">
<p>No Cycles Found</p>
</div>
{% endif %}
</div>
</div>
问题是详细信息页面中没有显示循环,即使我在数据库中保存了循环保存的程序,因此它们应该显示。 代码中是否有错误?
非常感谢你!
答案 0 :(得分:1)
class ProgramDetailView (generic.DetailView):
model = Program
template_name = 'programs/program.html'
context_object_name = 'sp'
slug_field = 'id'
def get_context_data(self, **kwargs):
kwargs['cycles'] = self.get_object().cycles.all()
return super(ProgramDetailView, self).get_context_data(**kwargs)
或
class ProgramDetailView (generic.DetailView):
model = Program
template_name = 'programs/program.html'
context_object_name = 'sp'
slug_field = 'id'
HTML
<div class="bg-white">
<div class="container text-center text-muted">
<div class="row">
{% if sp %}
{% for cycle in sp.cycles.all %}
<div class="col-sm-4 py-4">
<div class="card">
<p><h5>{{ cycles.cycle_name }}</h5></p>
<p class="card-text">{{ cycles.cycle_description }}</p>
<a href="" class="btn btn-secondary">Modify it</a>
</div>
{% endfor %}
{% else %}
<div class="bg-white">
<p>No Cycles Found</p>
</div>
{% endif %}
</div>
</div>