0

表格.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 中编写一个自定义函数,以单一格式将日期保存在数据库中。

谢谢

4

1 回答 1

2

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

您面临的问题是,您列出的两种有效格式有时会为相同的输入生成不同的日期对象。他们是模棱两可的。

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

要么选择一种格式,要么选择永远不会模棱两可的多种格式。使用 javascript 日历选择器非常有用,甚至可以为日期的各个部分单独输入文本。

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

于 2013-06-18T11:09:39.557 回答