【问题标题】:Saving datefield through django to Postgresql returns format error通过 django 将日期字段保存到 Postgresql 会返回格式错误
【发布时间】:2014-01-29 23:52:35
【问题描述】:

我正在尝试将格式为 dd/mm/yyyy 的日期从使用 Django 的视图保存到 postgresql 表。我收到以下错误:

ValidationError: [u"'2014/01/30' value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] format."]

如何更改特定表或整个数据库的格式?

我试过了:ALTER DATABASE myDb SET datestyle TO "ISO, YMD";

然后当我运行SHOW lc_ctype; 时,我得到:

lc_ctype   
-------------
en_US.UTF-8

然后SELECT current_date; 返回

  date    
------------
 2014-01-29

看起来不错,如果错误出现在 Django 中会引发什么问题

我的 views.py 看起来像这样:

logEntry, created = Logs.objects.get_or_create(entrydate=request_data['entryDate'], message=request_data['message'])
logEntry.save()

还有我的models.py

class Logs(models.Model):
   entrydate= models.DateTimeField(auto_now_add=True)
   message = models.CharField(max_length=100)

【问题讨论】:

    标签: django postgresql datefield


    【解决方案1】:

    我建议不要更改数据库,而是更改您的视图,以便将您的日期正确解析为日期时间。此外,可以按如下方式将其保存为时区感知日期时间对象:

    # views
    from django.utils import timezone
    from datetime import datetime
    
    
    entrydt = datetime.strptime(request_data['entryDate'], "%Y/%m/%d")
    entrydt = entrydt.replace(tzinfo=timezone.get_current_timezone())
    logEntry, created = Logs.objects.get_or_create(entrydate=entrydt, 
                                                   message=request_data['message'])
    logEntry.save()
    

    【讨论】:

      【解决方案2】:

      也许您的模型中有 DateTimeField 而不是 DateField。 DateTimeField 中的此错误消息 更改 DateTimeField -> DateField

      【讨论】:

      • 如果必须采用 YYYY-MM-DD 格式,那么我认为是 '2014/01/30'.replace('/','-')。但是很丑
      猜你喜欢
      • 1970-01-01
      • 2020-07-16
      • 2011-12-19
      • 1970-01-01
      • 2019-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多