我的环境:Django 1.9.7,Python 3.5.2
我使用以下模型代码将值强制转换为模型类中的--xmlfilter
和updated_at
字段。
created_at
创建新模型对象时,我的数据库中的这个字段如下所示:
class MyObject(models.Model):
...
...
...
created_at = models.DateTimeField(db_index=True, auto_now_add=True)
updated_at = models.DateTimeField(db_index=True, auto_now=True)
很高兴知道我可以测量到微秒级的东西,但理想情况下我希望这些字段精确到秒。我真的不需要更多,而且我不需要TZ。
| created_at | updated_at |
+-------------------------------+-------------------------------+
| 2016-08-20 15:21:34.959854-04 | 2016-08-20 15:21:34.959924-04 |
| 2016-08-20 15:21:34.977791-04 | 2016-08-20 15:21:34.97785-04 |
| 2016-08-20 15:21:34.979975-04 | 2016-08-20 15:21:34.980013-04 |
| 2016-08-20 15:21:34.981981-04 | 2016-08-20 15:21:34.982019-04 |
| 2016-08-20 15:21:34.983878-04 | 2016-08-20 15:21:34.983917-04 |
| 2016-08-20 15:21:34.985832-04 | 2016-08-20 15:21:34.98587-04 |
| 2016-08-20 15:21:34.987758-04 | 2016-08-20 15:21:34.987796-04 |
| 2016-08-20 15:21:34.989791-04 | 2016-08-20 15:21:34.989855-04 |
在我的项目| created_at | updated_at |
+-------------------------------+-------------------------------+
| 2016-08-20 15:21:34 | 2016-08-20 15:21:34 |
| 2016-08-20 15:21:34 | 2016-08-20 15:21:34 |
| 2016-08-20 15:21:34 | 2016-08-20 15:21:34 |
中,我定义了这个:
settings.py
但时区仍然出现在数据库中。
我的问题是:
USE_TZ = False
和updated_at
字段中有YYYY-MM-DD HH:MM:SS输出答案 0 :(得分:0)
您可以定义自己的默认值(下面的脚本),但使用auto_now
您无法执行任何操作,因为实现不会提供更多内容。
import datetime
def default_datetime():
now = datetime.datetime.now()
now.replace(microsecond=0)
return now
class MyObject(models.Model):
...
...
...
created_at = models.DateTimeField(db_index=True, default=default_datetime)
updated_at = models.DateTimeField(db_index=True, null=False)
my_object = MyObject(
...,
updated_at=default_datetime
)
来自Django注意:
auto_now和auto_now_add选项将始终在创建或更新时使用默认时区中的日期。如果你需要不同的东西,你可能想要考虑简单地使用你自己的可调用默认值或覆盖save()而不是使用auto_now或auto_now_add;或使用DateTimeField而不是DateField,并决定如何在显示时处理从datetime到date的转换。