Django преобразование isoformat string 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()

Исключение возникает на последней строке (skill.save()) только тогда, когда не возникает исключение DoesNotExist.

Вот модель навыков:

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?

У меня была такая же проблема. Оказалось, что я поставил запятую в конце оператора присваивания

В вашем коде ошибка находится здесь:

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

Python создает кортеж, когда в конце переменной стоит запятая.

Вернуться на верх