gpt4 book ai didi

python - 类型错误 : string indices must be integers When Checking array with dictionaries

转载 作者:行者123 更新时间:2023-12-01 07:34:57 24 4
gpt4 key购买 nike

检查具有特定值的键是否存在时,出现类型错误:字符串索引必须是整数。

if not any(dObj["date"] == wholeDay for dObj in userPunchCard.clock):
status = "Clock In"
content = {
"name" : user.name,
"title" : user.title,
"status" : status
}

这是 userPunchCard 的数据库

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 数据库表时,该表在为空时将为 null,并且 None 始终适合我检查它。所以这段代码中的 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 作为时钟,因此这意味着字符串存储在该字段中。因此,您的 userPunchCard.clock 将返回一个字符串。如果您随后迭代该字符串,则会迭代字符,这些字符也是字符串。因此,在这种情况下,dObj 是一个字符串,因此 dObj["date"] 确实会引发错误。

您可能想使用 JSONField field [Django-doc]相反,如 django-jsonfield package [PyPi] 提供的。在大多数数据库中(例如 PostgreSQL 除外),这仍然在内部存储为 CharField,但 Django 会自动将对象编码和解码为 JSON 对应项。因此 JSONField 能够存储列表、字典、字符串、整数等。

例如:

from jsonfield import <b>JSONField</b>

class PunchCard(models.Model):
clock = <b>JsonField</b>(default=list)
employee = models.ForeignKey(StaffMember, on_delete=models.PROTECT)

关于python - 类型错误 : string indices must be integers When Checking array with dictionaries,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57030633/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com