在数据库中以一种格式保存日期 - Django

时间:2013-06-18 10:44:00

标签: python django django-models django-forms django-views

forms.py

INPUT_FORMAT = (
('%d/%m/%Y','%m/%d/%Y')
)
class ReportDatetimeForm(forms.ModelForm):
date = forms.DateField(input_formats = INPUT_FORMAT,
widget=forms.DateInput()

class Meta:
model = Report
fields = ['date']

这是我的表单,以两种不同的格式获取输入日期。虽然以这种格式提供输入日期%m/%d/%Y'日期和月份在保存在数据库中时进行交换。这会影响我的应用程序。所以我想要将输入格式保存为单个格式yyyy-mm-dd,因此用户输入的输入格式,给定格式应保存为上述格式。

我想知道如何在forms.py中编写自定义函数,以单一格式保存数据库中的日期。

由于

1 个答案:

答案 0 :(得分:1)

存储在数据库中的实际日期与进入该字段的输入文本无关。日期存储为日期对象,而不是任意字符串。

您遇到的问题是,您列出的两种格式有效会产生不同的日期对象,对于相同的输入,有时会产生不同的日期对象。它们含糊不清。

如果用户在表单字段中输入字符串“01/02/1990”,实际日期是多少?是1990年2月1日;还是1990年1月2日?在您的特定实现中,所选日期将是第一种格式:2月1日。它将按顺序检查每种日期格式,并尝试解析日期。如果成功,则创建日期并保存。如果不成功,它会尝试每种连续的格式。

选择一种格式,或多种格式永远不会模糊不清。使用javascript日历选择器可能非常有用,甚至可以用于日期各个部分的单独文本输入。

你应该做的只是在你的django表格中允许ISO8601日期格式“YYYY-MM-DD”。在UI中,您可以允许用户以他们喜欢的任何格式输入日期,只要您在发送到服务器之前将其(使用javascript)转换为“YYYY-MM-DD”格式。但你应该做的是有3个单独的文本输入 - 一个用于日,月和年。