无法在django中保存不同的日期格式

时间:2016-12-16 06:04:36

标签: python django

我正在处理表单并有一个日期字段。 我想保存日期字段的不同日期格式,而不是使用django。 我正在" 01-jan-2016"日期,并希望保存在我的数据库中。当我试图保存相同的格式是引发错误

[u"'07-Dec-2016' value has an invalid date format. It must be in YYYY-MM-DD format."].

我知道这类问题已经提出,但它们无法解决我的问题。

views.py

post_date = request.POST['date']

lead_obj = CustomerLeads.objects.create(posting_date = post_date)

my models.py

class Leads(models.Model):
    customer_name = models.CharField(max_length=50,null=True, blank=True)
    title = models.CharField(max_length=100, null=True, blank=True)
    posting_date = models.DateField()

3 个答案:

答案 0 :(得分:1)

在你的views.py中试试这个:

from dateutil import parser

d = parser.parse("07-December-2016")
print d
d = d.strftime("%d-%b-%Y")
print d

输出:

2016-12-07 00:00:00
07-Dec-2016

它将处理各种格式。

答案 1 :(得分:1)

Mysql

  

DATE类型用于具有日期部分但没有时间部分的值。   MySQL在' YYYY-MM-DD'中检索并显示DATE值。格式。该   支持的范围是' 1000-01-01'到' 9999-12-31'。

Postgresql

  

几乎任何合理的格式都接受日期和时间输入,   包括ISO 8601,SQL兼容,传统POSTGRES等。   对于某些格式,日期输入中的日,月和年的排序是   含糊不清,并且支持指定预期的排序   这些领域。将DateStyle参数设置为MDY以进行选择   月 - 日 - 年解释,DMY选择日 - 月 - 年   解释,或YMD选择年 - 月 - 日解释。

链接表显示postgresql接受您要查找的格式。但它是如何存储的?让我们尝试插入

INSERT INTO stackoverflow_heatwatchlist(next_date_from, next_date_to) 
VALUES('1999 Jan 05','2001 Jun 06');

当你选择时,你得到的是' 2001-06-06'和' 1999-01-05'

SQlite的

在这里,您可以以任何您想要的格式插入,它将完全按照您输入的方式保存,因为sqlite不会强制执行任何严格的类型检查。 sqlite中的类型纯粹是装饰性的。但是django对此事有不同的看法,不会让你偏离标准格式。

SQL Server

在插入数据的方式方面具有很大的灵活性。请参阅链接表。但它是如何存储的? ' 1999年1月5日'

总结

如何将日期存储在表格中是完全无关紧要的,重要的是接受输入的格式以及它的显示方式。这就是django和蟒蛇的优秀日期和时间格式发挥作用的地方。

如果您对他们不满意,您有两种选择。第一种是将日期和时间存储为unix时间戳,并自己完成所有格式化,所有你需要的只是一点数学 - 这是一种相当普遍的做法。

第二种是使用CharField来存储你的数据,但这不是很有用。您不仅需要自己进行所有格式化和输入验证,任何计算都需要进行大量的字符串处理和转换。

答案 2 :(得分:0)

尝试在项目设置中将'%d-%b-%Y'添加到DATE_INPUT_FORMATS