当检查是否存在具有特定值的键时,我得到一个类型错误:字符串索引必须是整数
if not any(dObj["date"] == wholeDay for dObj in userPunchCard.clock):
status = "Clock In"
content = {
"name" : user.name,
"title" : user.title,
"status" : status
}
这是用户punchcard的数据库
class StaffMember(models.Models):
name = models.CharField(max_length = 255)
title = models.CharField(max_length = 255)
email = models.ChardField(max_length = 255)
password = models.ChardField(max_length = 255)
created_at = models.DateTimeField(auto_now_add = True)
updated_at = models.DateTimeField(auto_now = True)
objects = UserManager()
class PunchCard(models.Model):
clock = models.CharField(max_length = 9999)
employee = models.ForeignKey(StaffMember, on_delete=models.PROTECT)
我确信userPunchCard.clock确实是一个数组,其中至少有一个字典,因为这段代码
if userPunchCard.clock is None:
print ("if was hit in dashboard")
else:
if not any(dObj["date"] == wholeDay for dObj in userPunchCard.clock:
status = "Clock In"
content = {
"name" : user.name,
"title" : user.title,
"status" : status
}
在创建Django db表时,该表为空时将为null,并且没有任何一个表可以一直用于检查它。所以代码中的else正在运行,而不是if。另外,当用户打卡时,这是为请求运行的代码
userPunchCard.clock = []
newClockIn = {
"date" : wholeDay,
"clockIn" : standardTime,
"clockOut" : None,
"timeSpent" : None,
"points" : None,
"desc: None
}
userPunchCard.clock.append(newClockIn)
userPunchCard.save()
我确信我查对了
简短回答:您可能希望将
clock
设为JSONField
PunchCard
模型将CharField
作为clock
,这意味着字符串存储在该字段中。因此,userPunchCard.clock
将返回一个字符串。如果你在这个字符串上迭代,你就在字符上迭代,这些字符也是字符串。所以在这种情况下dObj
是一个字符串,因此dObj["date"]
确实会引发一个错误您可能希望使用^{} field [Django-doc],正如^{} package [PyPi]所提供的那样。在大多数数据库中(例如PostgreSQL除外),它仍然以
CharField
的形式在内部存储,但是Django会自动将对象编码和解码为JSON对应对象。所以JSONField
能够存储列表、字典、字符串、整数等例如:
相关问题 更多 >
编程相关推荐