【问题标题】:Unable to render the data from models to view in django framework无法从模型渲染数据以在 django 框架中查看
【发布时间】:2020-06-12 05:33:39
【问题描述】:

当我尝试运行服务器时,我收到一个错误,它显示 TypeError: 'Organization' object is not iterable。我附上模型和视图以供参考。您能否检查并确定我收到错误的原因。

''' 模型.py

from django.db import models


# Create your models here.

class Organization(models.Model):
    name = models.CharField(max_length=200, null=True)

    date_created = models.DateTimeField(auto_now_add=True, null=True)

    def __str__(self):
        return self.name


class Ticket_status(models.Model):
    name = models.CharField(max_length=200, null=True)

    def __str__(self):
        return self.name


class Ticket(models.Model):
    ticket_id = models.CharField(max_length=200, unique=True)
    orgname = models.ForeignKey(Organization, null=True, on_delete=models.SET_NULL)
    status = models.ForeignKey(Ticket_status, null=True, on_delete=models.SET_NULL)
    date_created = models.DateTimeField(auto_now_add=True, null=True)


    def __str__(self):
        return self.ticket_id

'''




views.py

'''
----------- 

from django.shortcuts import render
from django.http import HttpResponse
from.models import *

# Create your views here.
def organization(request, orgname):
    organization_name=Organization.objects.get(id=orgname)
    organization_count=Organization.objects.get(id=orgname).ticket_set.all()



    return render(request,'ticket\organization1.html',{'organization_name':organization_name,' organization_count': organization_count})
'''

模板 这是模板文件(ticket\organization1.html)。您能检查并确定我收到错误的原因吗? '''

{% extends 'ticket/main.html' %}

{% block content %}
<br>
<div class="container-fluid">
    <div class="row">
        <div class="col-sm-4">
        <div class="card">
          <div class="card-body">
            <h5 class="card-title">Organization Name</h5>
              <P> {% for t in organization_name %}
                  {{t.name}}
                  {% endfor %}
                  </P>
            <p class="card-text"></p>

          </div>
        </div>
      </div>

      <div class="col-sm-4">
        <div class="card">
          <div class="card-body">
            <h5 class="card-title">Active Ticket</h5>
            <p class="card-text">
                {{ organization_count.count }}
            </p>

          </div>
        </div>
      </div>

        <div class="col-sm-4">
        <div class="card">
          <div class="card-body">
            <h5 class="card-title">Closed Ticket</h5>
            <p class="card-text">2.</p>
            <!--a href="#" class="btn btn-primary">View</a-->
          </div>
        </div>
      </div>
    </div>
    <div class="row">
    <br>
        <div>
            <h2>On-Going Tickets</h2><br>

        </div>
      <table class="table table-hover">
                        <tr>
                            <th>S NO</th>
                            <th>Ticket ID</th>
                            <th>Organization</th>
                            <th>Ticket Status</th>
                            <br>
                        </tr>
                            {% for t in organization_name %}
                                <tr>
                                    <td>{{t.Ticket_id}}</td>
                                    <td>{{t.Ticket_id}}</td>
                                    <td>{{t.organization}}</td>
                                    <td>{{t.Ticket_Status}}</td>
                                </tr>
                            {% endfor %}
                    </table>
      </div>
    </div>


{% endblock %}'''

【问题讨论】:

  • 欢迎来到 SO。您可以将您的模板添加到您的问题中吗?
  • 在ticket\organization1.html 模板中,您可以遍历organization_count,但不能遍历organization_name。我猜你正在尝试迭代 organization_name 这是一个单一的组织实例。
  • 或者你正在尝试渲染组织 {{organization_name}} ,它将是 {{organization_name.name}}
  • @Ben,有没有办法让组织成为多个实例,以便我可以获取数据。
  • organization_name 正在获取价值。当我为 organization_count 添加行时,它会抛出错误

标签: python django python-3.x django-models django-templates


【解决方案1】:

你的第一个

<P> {% for t in organization_name %}
    {{t.name}}

应该是

<P> {{ organization_name.name }}  # organization_name is an object

你的第二个

{% for t in organization_name %}

应该是

{% for t in organization_count %}  # organization_count is a list of tickets
    <td>{{t.ticket_id}}</td>
    <td>{{organization_name.name}}</td>  # single object, same as above
    <td>{{t.status}}</td>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-19
    • 1970-01-01
    • 1970-01-01
    • 2015-05-21
    • 1970-01-01
    • 1970-01-01
    • 2018-04-06
    • 1970-01-01
    相关资源
    最近更新 更多