Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Django详细信息常规视图中显示多个字段_Django_Django Models_Django Views - Fatal编程技术网

在Django详细信息常规视图中显示多个字段

在Django详细信息常规视图中显示多个字段,django,django-models,django-views,Django,Django Models,Django Views,在我的Django项目中,我有两个模型——Program和Cycle——它们通过多个关系连接在一起,因此一个程序可以有多个周期,同时周期可以是多个不同程序的一部分 从通用列表视图中,用户可以选择一个程序并访问该程序的详细视图,其中我应该显示所选程序中包含的所有周期 views.py class AllProgramsView (generic.ListView): template_name = 'programs/index.html' context_object_name

在我的Django项目中,我有两个模型——Program和Cycle——它们通过多个关系连接在一起,因此一个程序可以有多个周期,同时周期可以是多个不同程序的一部分

从通用列表视图中,用户可以选择一个程序并访问该程序的详细视图,其中我应该显示所选程序中包含的所有周期

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>

{%if循环%}
{程序%中循环的%s}
{{cycles.cycle_name}

{{cycles.cycle\u description}

{%endfor%} {%else%} 没有找到周期

{%endif%}
问题是没有周期显示在详细信息页面中,即使我的程序在db中保存了周期,因此它们应该显示。 代码中有错误吗

提前非常感谢

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)


html


{%if sp%}
{sp.cycles.all%中周期的百分比}
{{cycles.cycle_name}

{{cycles.cycle\u description}

{%endfor%} {%else%} 没有找到周期

{%endif%}
这不可能是真正的代码。您的ProgramDetailView会立即为
self
@DanielRoseman抛出一个NameError,如果您所说的真实代码是指这不是正确的代码,那么您可能是对的:我只是从Django开始,一步一步地积累知识。这段代码是我在阅读了所有可以检索到的文档后得出的。它确实会产生错误,所以在这里发布它的目的是为了看看是否有比我更了解情况的人可以提供帮助。我试图实现的是一个页面,人们可以看到程序中包含的所有周期。你有什么建议吗?但是你说“问题是没有周期显示在细节页面”。这意味着页面至少会显示出来,这在您发布的代码中是不可能发生的。如果您希望我们帮助您,您需要发布您正在使用的实际代码。或者,描述一下您遇到的实际问题,在本例中是“当我启动服务器时,代码抛出了一个名称错误”。@DanielRoseman我已经为此代码工作了几个小时,在我对ProgramDetailView进行最新更改之前,我没有收到错误,但详细信息页面仍然缺少周期列表。然后我尝试通过修改视图进行修复,并产生了您看到的代码,这给了我“TypeError:”属性“object not iterable”。我可以回到前面的代码,如果这对修复没有显示问题的循环有用的话;它可以直接在模板中完成。但由于OP甚至都没有显示工作代码,所以很难知道她真正的问题在哪里。你是对的。这是他最有可能做的achieve@Ykh好的,我会试试你的解决方案,谢谢你的发帖。以防万一,这个问题不清楚,我想实现的是一个页面,人们可以看到程序中包含的所有周期。@Ykh我已经用你的代码替换了我的代码,但现在我得到了一个NoReverseMatch错误。我用代码版本编辑了我的问题,代码版本没有出现任何错误,但仍然没有显示周期列表。将
context\u object\u name='sp'slug\u field='id'
添加到您的详细视图中
class ProgramDetailView (generic.DetailView):
    model = Program
    template_name = 'programs/program.html'
    context_object_name = 'sp'
    slug_field = 'id'
<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>