Django - 日期和时间字段说明
Posted
技术标签:
【中文标题】Django - 日期和时间字段说明【英文标题】:Django - Date and Time Field Explanation 【发布时间】:2014-08-29 04:30:13 【问题描述】:关于模型和表单类中的日期和时间字段,我有几个问题。
1.) 在日期字段的文档中,“规范化为:Python datetime.date 对象”这一行是什么。意思是?这是否意味着提交表单时存储在request.POST字典中的字段数据是一个datetime.date对象?如果是,那么在提交表单时它什么时候做,或者我们必须调用它的一个函数?
2.)如果我有一个 models.DateField() 那么在视图中手动为其分配数据时,我应该分配一个 datetime.date 对象还是 'yyyy-mm-dd' 格式的 unicode 对象?
3.) 如果我在 forms.DateField() 中以 '%d/%m/%y' 格式取一个日期,我如何将它分配给我的 models.DateField() 因为这似乎只接受'YYYY-mm-dd' 格式?
如果有人还可以建议一些链接,这些链接可以通过文档以外的示例详细解释这些字段,那将会很有帮助。
【问题讨论】:
【参考方案1】:对于第一个问题,datefield 保存日期对象,如果您将任何数据(例如字符串:“01-01-2015”)保存到 datefield,那么您必须将该数据转换为日期对象。您不会在 request.POST 中获得日期对象,如果您使用表单,则可以使用 cleaned_data
获得它。(示例如下)从 request.POST 中,您将获得一个 unicode 对象。(然后您将需要将其转换为日期对象,示例如下)
第二个问题,显然你必须保存 dateobject,而不是 unicode 对象。
第三个问题,在forms
,To display initial field value properly formatted, use DateInput widget. To customize validation, use input_formats keyword argument of DateField。在这里,从forms
,你会在视图中得到一个日期对象,所以可以直接保存,比如:
在model.py中:
class DateModelClass(models.Model):
date= models.DateField()
在forms.py中:
date= forms.DateField(widget=forms.DateInput(format = '%d/%m/%Y'), input_formats=('%d/%m/%Y',))
在views.py中:
date_data= DateModelClass(date= form.cleaned_data['date'])
date_data.save()
您还可以将所需格式的字符串转换为日期对象,如下所示:
>>import datetime
>>datetime.datetime.strptime(u"09/07/2014", '%d/%m/%Y').date()
【讨论】:
非常感谢。为我工作!以上是关于Django - 日期和时间字段说明的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Django F 表达式中将日期和时间字段合并到 DateTime 字段中