如何以时区感知的方式在Django表单中使用DateField?

时间:2015-06-08 01:10:06

标签: django django-timezone

我在Django 1.8模型中有一个DateField,类似于:

    public partial class Product
    {    
        public int ProductID { get; set; }
        etc
    }

    public partial class ProductDescription
    {
        public int ProductDescriptionID { get; set; }

        public string Description { get; set; }
    }

当它进入某个表单时,我会找回一个“天真”的对象:

from django.db import models
birth_date = models.DateField()

在调试器中打印birth_date:

birth_date = the_form.cleaned_data['birth_date']

然后,当这个东西保存到数据库时,我收到一个警告,正如文档所承诺的那样:

ipdb> birth_date
datetime.date(2015, 6, 7)

我已经阅读了some articles,我仍然感到困惑。我该怎么办这个日期?

我应该将其转换为DateTime,使其能够识别时区,然后返回日期吗?我应该将模型设为DateTimeField并放弃DateFields吗?这里有什么最佳做法?

1 个答案:

答案 0 :(得分:0)

我认为您可以尝试使用make_aware将日期转换为感知格式。来自make_aware django文档:

  

make_aware(value,timezone = None,is_dst = None)

     

返回表示与之相同的时间点的知晓日期时间   时区价值,价值是一个天真的日期时间。

这应该修正警告:

from django.utils import timezone

birth_date = timezone.make_aware(the_form.cleaned_data['birth_date'], timezone.get_default_timezone())