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

保存Django模型至MySQL数据库时触发AttributeError错误及用户列表显示异常的技术求助

解决Django模型保存报错与用户列表不显示问题

Hey,我来帮你排查这两个问题!你遇到的AttributeError: 'tuple' object has no attribute 'startswith'和页面用户列表为空的情况,都是代码里的小细节导致的,咱们一步步来解决:

1. 修复模型保存的AttributeError报错

你的models.py里的Meta类存在一个小语法错误:

class Meta:
    db_table = "\"users\"",

看到最后那个多余的逗号了吗?这个逗号会让db_table的值变成一个元组(tuple),而Django期望的是字符串类型的表名。当Django尝试对元组调用字符串的startswith方法时,自然就抛出了错误。

修复方法很简单,删掉那个多余的逗号即可:

class Meta:
    db_table = "\"users\""

如果你的数据库表名就是users,其实也可以去掉转义引号,直接写db_table = "users",这样更简洁。

2. 解决页面用户列表为空的问题

再看views.py里的show视图,这里有两个关键问题:

  • 你没有定义users变量!虽然保存了新用户,但没有从数据库查询所有用户数据,模板根本拿不到内容,所以列表显示为空。
  • 你给模板传递的键是user,但通常展示列表会用复数形式(比如users),模板里大概率也是用这个变量名遍历数据的(当然具体要看你的模板代码,但先解决变量未定义的核心问题)。

修复后的视图代码如下:

def show(request):
    # 保存新用户(注意:每次访问该视图都会创建新用户,测试完建议注释或加判断逻辑)
    newUser = Users(
        identifier = "abc",  # 不需要额外加引号,直接传字符串即可
        accounts = "[]",
        group = "admin",
        inventory = "[]",
        job = "police",
        job_grade = 3,
        loadout ="[]",
        position = "da",
        firstname = "swpw",
        lastname = "wwww",
        dateofbirth = "wolplwodokwowdüp",
        sex = "m",
        height = 78,
        skin = "[]",
        status = "[]",
        is_dead = 0,
        phone_number = "hallo",
    )
    newUser.save()
    
    # 查询数据库中所有用户
    users = Users.objects.all()
    # 将用户列表传递给模板
    return render(request,'acp/show.html',{'users':users})

另外提醒一句:如果只是测试保存功能,建议不要让每次请求都创建新用户,不然刷新页面就会重复生成测试数据,你可以把保存代码注释掉,或者添加条件判断(比如只在GET请求的特定参数下创建)。

最后,确保你的show.html模板是通过users变量遍历展示的,举个简单例子:

{% for user in users %}
    <div>{{ user.firstname }} {{ user.lastname }}</div>
{% endfor %}

这样修改后,应该就能同时解决报错和用户列表不显示的问题啦!

内容的提问来源于stack exchange,提问作者Jojo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 04:18:11