Django - 日期和时间字段说明

时间:2014-07-08 12:24:34

标签: django django-models django-forms

关于模型和表单类中的日期和时间字段,我几乎没有问题。

1.)在日期字段的文档中,“Normalizes to:Python datetime.date object”行是什么?意思?这是否意味着在表单提交时存储在request.POST字典中的字段数据是datetime.date对象?如果是,那么它何时在提交表单时执行,或者我们是否必须调用其中一个功能

2.)如果我有一个models.DateField()然后在视图中手动分配数据时我应该使用'yyyy-mm-dd'格式分配datetime.date对象或unicode对象吗?

3.)如果我在'%d /%m /%y'格式的forms.DateField()中使用日期,我如何将其分配给我的models.DateField(),因为它似乎只接受'YYYY-mm-dd'格式?

如果有人也可以建议一些链接来解释这些字段,除了文档之外还有其他示例,这会很有帮助。

1 个答案:

答案 0 :(得分:0)

对于第一个问题,datefield会保存日期对象,如果要保存任何数据(例如字符串:" 01-01-2015")到datefield,那么你有将该数据转换为日期对象。你不会在request.POST中获得一个日期对象,如果你使用一个表单,那么你可以使用cleaned_data来获取它。(例子如下)从request.POST,你将获得一个unicode对象。(然后你将需要将其转换为日期对象,例如下面的例子)

对于第二个问题,显然你必须保存dateobject,而不是unicode对象。

第三个问题,在formsTo 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()