w--*_*w-- 4 python django datetime unix-timestamp
我想使模型的DateTimefield接受Unix时间戳(以秒为单位)值。
我找到了,但是可接受的解决方案不起作用?
DataTimeField中的unixtimestamp输入
即我不明白如何添加'%s'作为输入格式,特别是当标准datetime字段的to_python()代码不包含任何用于处理unix时间戳的逻辑时,尤其如此。
如果有一项设置可以让我做得很好。
否则,我想我想要的是子类化DateTimeField,并在设置值时以某种方式自动将int转换为datetime对象。我想在保存之前执行此操作,而不是覆盖save(),因为在检索此字段的值时我希望保持一致。即,当我取出值时,无论实例是否已保存,我都不必担心我是否有日期时间对象或整数。
我查看了django.db.models.fields的来源,但对我来说并不明显。
pip包django-unixdatetimefield提供了一个UnixDateTimeField字段,您可以立即使用该字段(https://pypi.python.org/pypi/django-unixdatetimefield/)。
示例模型:
from django_unixdatetimefield import UnixDateTimeField
class MyModel(models.Model):
created_at = UnixDateTimeField()
Run Code Online (Sandbox Code Playgroud)
Python ORM查询:
>>> m = MyModel()
>>> m.created_at = datetime.datetime(2015, 2, 21, 19, 38, 32, 209148)
>>> m.save()
Run Code Online (Sandbox Code Playgroud)
数据库:
sqlite> select created_at from mymodel;
1426967129
Run Code Online (Sandbox Code Playgroud)
如果感兴趣的话,这里是源代码-https: //github.com/Niklas9/django-unixdatetimefield。
免责声明:我是这个pip包的作者。
默认情况下,Django 应该会使用 UNIX 时间戳作为 DateTimeField 的值。Django\xe2\x80\x99s 的内省功能确实很强大,但是却让事情变得不那么明显,尤其是在 Python 代码的上下文中。
\n\nDateTimeField您可以通过子类化和覆盖来实现它pre_save。
from django.db import models\nfrom datetime import datetime\n\nfrom django.db.models.fields import DateTimeField\n\nclass UCDateTimeField(DateTimeField):\n\n def pre_save(self, model_instance, add):\n if self.auto_now or (self.auto_now_add and add):\n value = datetime.datetime.now()\n setattr(model_instance, self.attname, value)\n return value\n else:\n value = getattr(model_instance, self.attname)\n if not isinstance(value, datetime):\n # assume that the value is a timestamp if it is not a datetime\n value = datetime.fromtimestamp(int(value))\n # an exception might be better than an assumption\n setattr(model_instance, self.attname, value)\n return super(UCDateTimeField, self).pre_save(model_instance, add)\n\n\nclass Event(models.Model):\n date = UCDateTimeField()\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
6270 次 |
| 最近记录: |