MySQL / Django中的部分空日期

时间:2009-03-16 15:48:31

标签: mysql django date

我目前正在将我的网站从PHP转换为Django,但由于我是Python的新手,所以我很难理解我的想法。

有时我的数据库中的日期不完整(即我可能不知道当天甚至是月份),因此目前有三个整数字段:date_yeardate_monthdate_day

我注意到MySQL接受'部分为空'date字段(例如2004-04-00,1994-00-00),但Django只是将它们视为'完全'无效。

我只想以下列格式显示这些日期:

  • 16 March 2009(完全知道)
  • March 2009(未知日)
  • 2009(未知日期和月份)

我认为我将无法在MySQL中使用正确的date字段,并且我必须在模型中创建一个仿date然后使用自定义模板过滤器;有人能帮忙吗?

3 个答案:

答案 0 :(得分:3)

您可以将两个日期时间存储为范围。如果午夜到午夜意味着“在这一天的某个时间”,如果范围是整整一个月,那就是你所知道的。如果你知道确切的时间,他们将是平等的。

答案 1 :(得分:1)

当MySQL以ALLOW_INVALID_DATES模式运行时,它不会对输入执行任何验证检查,因此您可以存储无效日期。这是标准SQL的扩展,因为Django是跨数据库兼容的,所以它不支持这一点。此外,Django将日期转换为Python日期对象,这些日期对象也不支持部分日期。

您最好的选择是将列拆分为三或将日期存储为文本并自行处理。

答案 2 :(得分:1)

我一直在寻找类似问题的解决方案,但是使用PostgreSQL。

Fuzzy date matching in PostgreSQL

也许你可以适应这样的事情?我知道,它有点不合时宜。