You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Django数据库数据无法在home.html显示求助

Django数据无法在页面展示的问题排查与解决

核心问题梳理及修复步骤

1. 模型类方法错误

models.py里的__int__方法完全错误,Django模型需要__str__方法返回可读的对象标识,且你引用了不存在的self.title字段,会直接引发报错。
修复后的models.py:

from django.db import models

class table_1(models.Model):
    datetime = models.DateField()
    machine_1 = models.IntegerField()
    machine_2 = models.IntegerField()
    dryer = models.IntegerField()
    machine_1_time = models.TimeField()
    machine_2_time = models.TimeField()
    dryer_time = models.TimeField()

    def __str__(self):
        return str(self.datetime)  # 用datetime字段作为对象的可读标识

2. 数据库表不匹配

你通过SQL创建的表是machine_dara(注意拼写错误:应为machine_data),但Django默认会为模型生成格式为应用名_table_1的表名(比如应用名为table时,表名是table_table_1),导致模型无法读取你插入的数据。

解决方式:

  • 方式一:在模型中指定表名,直接关联你创建的SQL表:
    class table_1(models.Model):
        # ... 字段定义
        class Meta:
            db_table = 'machine_dara'  # 对应你创建的SQL表名
    
  • 方式二:使用Django迁移系统重建表再导入数据:
    1. 执行python manage.py makemigrations生成迁移文件
    2. 执行python manage.py migrate创建模型对应的表
    3. 修改SQL脚本的表名为模型对应的表名,重新导入数据

3. 字段类型不匹配

SQL脚本里的machine_1_time、machine_2_time、dryer_time是INT类型,但模型里定义的是TimeField,类型不兼容,Django无法正确解析数据。

解决方式:

  • 若存储的是分钟/秒数,模型字段改为IntegerField:
    machine_1_time = models.IntegerField()
    machine_2_time = models.IntegerField()
    dryer_time = models.IntegerField()
    
  • 若确实要存储时间,SQL字段类型改为TIME,且插入数据需为合法时间格式(如'01:24:00'),而非整数。

4. 上下文变量传递错误

views.py里的上下文字典键带多余空格:{' tablet': tablet},模板中调用的tablet变量会因键名不匹配无法获取数据。
修复后的views.py:

from django.shortcuts import render
from .models import table_1

def home(request):
    tablet = table_1.objects.all()
    return render(request, 'table/home.html', {'tablet': tablet})  # 移除键和值的多余空格

5. 模板语法错误

home.html存在两处无效调用:

  • {{ tablet.machine_1_time }}:tablet是查询集(多对象集合),不能直接调用单个对象的字段
  • {{ mytable.machine_1 }}:上下文未传递mytable变量,无法读取数据

修复后的home.html:

{% for item in tablet %}
    <h3>{{ item.datetime }}</h3>
    <p>机器1: {{ item.machine_1 }} | 时长: {{ item.machine_1_time }}</p>
    <p>机器2: {{ item.machine_2 }} | 时长: {{ item.machine_2_time }}</p>
    <p>烘干机: {{ item.dryer }} | 时长: {{ item.dryer_time }}</p>
{% empty %}
    <p>暂无数据</p>
{% endfor %}

添加{% empty %}可在无数据时给出提示,便于排查问题。

验证步骤

  1. 重启Django服务器
  2. 确认数据库数据在模型对应的表中,且字段类型匹配
  3. 访问页面查看数据是否正常显示

内容的提问来源于stack exchange,提问作者Олександр Чейпеш

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 15:35:35