Django将等格式字符串datetime转换为元组,并出现错误



我正在尝试更新数据库中Skill实体的两个日期时间字段。我确信我正在传递一个相同格式的日期时间字符串。当创建而不是更新时,一切都很好,但在更新时我得到了:

Exception Type:     TypeError
Exception Value:    fromisoformat: argument must be str

以下是引发TypeError的代码:

# create or update skill
created = ibm_date_to_iso(clean_data["skill"]["created"])
updated = ibm_date_to_iso(clean_data["skill"]["updated"])
try:
skill = Skill.objects.get(
skill_id=clean_data["skill"]["skill_id"],
snapshot=clean_data["skill"]["snapshot"]
)
# update fields if skills exists already
skill.name = clean_data["skill"]["name"],
skill.type = clean_data["skill"]["type"],
skill.status = clean_data["skill"]["status"],
skill.created = created,
skill.updated = updated,
skill.language = clean_data["skill"]["language"],
skill.description = clean_data["skill"]["description"],
skill.dialog_settings = clean_data["skill"]["dialog_settings"]
skill.uploads.add(u)
except Skill.DoesNotExist:
skill = Skill(
skill_id=clean_data["skill"]["skill_id"],
name=clean_data["skill"]["name"],
type=clean_data["skill"]["type"],
status=clean_data["skill"]["status"],
created=created,
updated=updated,
language=clean_data["skill"]["language"],
snapshot=clean_data["skill"]["snapshot"],
description=clean_data["skill"]["description"],
dialog_settings=clean_data["skill"]["dialog_settings"]
)
skill.save()
skill.uploads.add(u)
# new page for the skill entity
page = Page(
title="notes for Skill {} snap {}".format(
skill.name,
skill.snapshot),
content="This page is empty..."
)
page.save()
skill.save()

只有在未引发DoesNotExist异常时,才会在最后一行(skill.save(((引发异常。

这是技能模型:

class Skill(models.Model):
skill_id = models.CharField(max_length=36)
name = models.TextField()
type = models.TextField()
status = models.TextField()
created = models.DateTimeField()
updated = models.DateTimeField()
language = models.TextField()
snapshot = models.IntegerField()
description = models.TextField()
dialog_settings = models.TextField()
page = models.ForeignKey(
"Page",
on_delete=models.SET_NULL,
default=None,
null=True,
blank=True)
uploads = models.ManyToManyField(
"upload",
blank=True,
default=None)
class Meta:
constraints = [
models.UniqueConstraint(
fields=["skill_id", "snapshot"],
name="unique_skill_snapshot")
]

当检查调试数据时,引发TypeError的最后一行在Django代码库中:

assistant_doc/python_env/lib/python3.8/site-packages/django/utils/dateparse.py, line 116, in parse_datetime
return datetime.datetime.fromisoformat(value)
…
Local vars
Variable    Value
value   ('2022-01-21T10:07:32.045000',)

正如您所看到的,"value"参数已更改为包含isoformat字符串的元组。这是Django中的一个bug吗?

我也遇到了同样的问题。原来,我在作业语句的末尾有一个尾随逗号。

在你的代码中,错误在这里:

skill.name = clean_data["skill"]["name"], # <-- comma here!

当逗号位于变量末尾时,Python会创建一个元组。

最新更新