保存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
相关产品推荐
相关产品推荐

