【问题标题】:Django DateTimeField TypeError: expected string or bytes-like objectDjango DateTimeField TypeError:预期的字符串或类似字节的对象
【发布时间】:2017-03-24 20:23:05
【问题描述】:

我知道有很多关于这个错误的帖子。如:this和this one

但我已经知道了。这就是我变得疯狂的原因。

当我创建一个实例并尝试保存它时,我没有问题:

per_detail.preview_title = per_detail.details_sample.preview_title
per_detail.icon = per_detail.details_sample.icon
per_detail.content = fill_content(per_detail)
per_detail.save()

简单。

但是当已经有实例时,我尝试再次保存它(更新它)。然后我得到这个错误:

match = datetime_re.match(value)

TypeError:预期的字符串或类似字节的对象

使用此代码:

personal_detail_sample = kwargs['instance']
        personal_details = PersonalDetail.objects.filter(Q(details_sample=personal_detail_sample))
        for per_detail in personal_details:
            per_detail_updated = fill_updated_content(personal_detail_sample, per_detail)
            per_detail_updated.save()

我得说,我尝试在哪里更新该实例并不重要,我总是会遇到同样的错误。 (所以,不是因为kwargs['instance'])

这是给麻烦的领域:

sent_date = models.DateTimeField(_('sent_date'), null=True, blank=True)

您可能已经注意到,我从未填写“sent_date”字段,但它应该为空。所以应该问题不大。为了安全起见,我也尝试过:

per_detail.sent_date = *a date*
per_detail.save()

我也遇到了同样的错误。

我不知道会是什么。

也许有人可以帮助我。

【问题讨论】:

  • value 不是字符串或类似字节的对象(可能是 Unicode,可能是 Django 字段类型 - 没有详细阅读您的问题),无论如何您应该打印它的值/类型/repr - 或设置断点并检查它...
  • 移除 auto_now_add 并重试
  • 没有机会...我删除了 auto_now_add 并进行了调试,得到了sent_date = None,对于数据库来说它是“null”并且我允许它。为了以防万一,我做了几次“makemigrations”和“migrate”,结果相同。 :(我不知道...
  • 我也用sent_date = 2017-03-24 20:37:48.584796(调试)做了per_detail_updated.sent_date = datetime.datetime.now(),得到了同样的错误。我正在考虑擦除所有迁移并再次进行迁移......
  • 删除迁移并再次解决问题。

标签: python django django-rest-framework


【解决方案1】:

我在“日期”而不是“发送日期”字段中遇到错误。

我很抱歉。 models.py 中的“日期”字段为:

date = models.DateTimeField(_('date'), auto_now_add=True) 但在数据库中是time without time zone 而不是timestamp without time zone。为什么?谁知道...

我删除了sent_date 字段,发现还有另一个日期错误,这就是我发现错误的原因。

非常感谢那些试图提供帮助的人!

【讨论】:

    猜你喜欢
    • 2020-07-08
    • 2019-05-15
    • 2019-10-31
    • 1970-01-01
    • 2018-10-17
    • 2018-05-04
    • 2017-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多