首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django将等格式字符串日期时间转换为元组和上升错误

Django将等格式字符串日期时间转换为元组和上升错误
EN

Stack Overflow用户
提问于 2022-02-10 16:14:37
回答 1查看 284关注 0票数 1

我正在尝试更新数据库中的技能实体的两个datetimefields字段。我肯定是在传递一个等格式的日期时间字符串。当创建而不是更新时,一切都很好,但是在更新时我得到:

代码语言:javascript
复制
Exception Type:     TypeError
Exception Value:    fromisoformat: argument must be str

下面是引发TypeError的代码:

代码语言:javascript
复制
# 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()

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

以下是技能模型:

代码语言:javascript
复制
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代码库中:

代码语言:javascript
复制
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”参数已更改为包含异构体字符串的元组。这是Django的窃听器吗?

EN

回答 1

Stack Overflow用户

发布于 2022-04-18 00:25:14

我也有同样的问题。结果发现,在任务语句的末尾,我有一个后缀逗号。

在您的代码中,错误如下:

代码语言:javascript
复制
skill.name = clean_data["skill"]["name"], # <-- comma here!

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71068504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档