Django报no such column: Homepage_goods.number_text错误 模板渲染字段失败
报错原因
- 核心触发逻辑是Django ORM在查询
Goods模型对应的数据表Homepage_goods时,找不到名为number_text的列。 - 你在
IndexView中定义的number等方法属于视图类的方法,不会绑定到Goods模型实例上,模板调用{{good.number_text}}是读取模型实例的属性,和视图类的自定义方法无关。 - 可能是你未在
Goods模型中定义number_text字段,或是新增字段后没有执行迁移命令同步到数据库。 - 也可能是模板调用的字段名和模型内实际定义的字段名不匹配,比如模型内字段是
number,模板错写为number_text。
解决方案
方案1:模型新增字段(推荐)
- 打开
models.py中的Goods模型定义,补全对应的字段,示例如下:
from django.db import models class Goods(models.Model): # 原有其他字段保留 number_text = models.CharField(max_length=100, verbose_name="商品编号") description_text = models.TextField(verbose_name="商品描述") price_text = models.CharField(max_length=50, verbose_name="商品价格")
- 执行迁移命令同步字段到数据库:
python manage.py makemigrations python manage.py migrate
- 删除
IndexView中无用的三个自定义方法即可,模板可以直接读取模型字段值。
方案2:动态给实例加属性(不需要修改数据库时使用)
如果不需要持久化存储number_text等字段值,可以重写get_queryset方法动态赋值,示例如下:
class IndexView(generic.ListView): template_name = 'Homepage/index.html' model = Goods context_object_name = 'goods' def get_queryset(self): goods_list = super().get_queryset() for good in goods_list: # 此处替换为你自己的属性生成逻辑 good.number_text = f"NO.{good.id}" good.description_text = good.desc # 可以从已有字段取值 good.price_text = f"¥{good.price}" return goods_list
内容的提问来源于stack exchange,提问作者Licrencie
相关产品推荐
相关产品推荐

