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

Python 在数据库中以一种格式保存日期-Django,python,django,django-models,django-forms,django-views,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'] 这是我的表单,用于以两种不同格式获取输入作为日期。在以这种格

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


感谢

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

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

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

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


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

不,这不是问题所在。我解释了问题所在。尝试输入此日期:“12/29/2013”,然后查看数据库中是否正确表示了该日期。在UI中选择日期格式绝对不会影响允许的表单日期格式。您以字符串形式提供了一个不明确的日期,表单正在按顺序尝试输入并选择该日期。Josh,当输入的日期和月份都小于12时,会出现此问题,如何使其适用于所有输入格式/如何解决此问题。我从上周五开始面临此问题,请在代码级别告诉我如何解决此问题。@user2086641我知道它何时发生。我的回答解释了为什么会发生这种情况。我的回答也解释了你应该如何着手修复它。这不是您需要解决的代码问题,而是常识问题。“01/02/2013”不明确。在表单中使用3个单独的文本输入;一天、一个月、一年各一个。然后在表单的“save”方法中构造一个实际的日期对象。停止使用ModelForms解决此特定问题,并使用标准表单。你首先需要了解实际问题是什么。我已经尽我所能了。你已经问了这个问题至少三次了。停止滥用堆栈溢出。我已经解释了为什么会出现问题,而这不是代码问题。您无法理解使用日期时间的基础知识。与你的同事交谈,也许他们可以帮助你理解你做错了什么。