私はMySQLデータベースを持っていますが、今はすべてのdatetimeフィールドをmodels.DateTimeField
として生成しています。代わりにtimestamp
を取得する方法はありますか?djangoのタイムスタンプフィールド
djangoのドキュメントにはこれはありませんか?
私はMySQLデータベースを持っていますが、今はすべてのdatetimeフィールドをmodels.DateTimeField
として生成しています。代わりにtimestamp
を取得する方法はありますか?djangoのタイムスタンプフィールド
djangoのドキュメントにはこれはありませんか?
これについては、実際には非常に有益な記事がありました。ここで: http://ianrolfe.livejournal.com/36017.html
ページの溶液がわずか廃止されましたので、私は次のようでした:
from django.db import models
from datetime import datetime
from time import strftime
class UnixTimestampField(models.DateTimeField):
"""UnixTimestampField: creates a DateTimeField that is represented on the
database as a TIMESTAMP field rather than the usual DATETIME field.
"""
def __init__(self, null=False, blank=False, **kwargs):
super(UnixTimestampField, self).__init__(**kwargs)
# default for TIMESTAMP is NOT NULL unlike most fields, so we have to
# cheat a little:
self.blank, self.isnull = blank, null
self.null = True # To prevent the framework from shoving in "not null".
def db_type(self, connection):
typ=['TIMESTAMP']
# See above!
if self.isnull:
typ += ['NULL']
if self.auto_created:
typ += ['default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP']
return ' '.join(typ)
def to_python(self, value):
if isinstance(value, int):
return datetime.fromtimestamp(value)
else:
return models.DateTimeField.to_python(self, value)
def get_db_prep_value(self, value, connection, prepared=False):
if value==None:
return None
# Use '%Y%m%d%H%M%S' for MySQL < 4.1
return strftime('%Y-%m-%d %H:%M:%S',value.timetuple())
それを使用するには、あなたがしなければならないすべては、次のとおりです。MySQLで timestamp = UnixTimestampField(auto_created=True)
、列は次のように表示されます。 'timestamp' timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
これは、MySQLデータベースでのみ機能するという欠点があります。しかし、あなたは他人のためにそれを簡単に変更することができます。
pipパッケージdjango-unixdatetimefieldには、このすぐに使用できるUnixDateTimeFieldフィールドが用意されています(https://pypi.python.org/pypi/django-unixdatetimefield/)。
例モデル:
from django_unixdatetimefield import UnixDateTimeField
class MyModel(models.Model):
created_at = UnixDateTimeField()
PythonのORMクエリ:
>>> m = MyModel()
>>> m.created_at = datetime.datetime(2015, 2, 21, 19, 38, 32, 209148)
>>> m.save()
データベース: - https://github.com/Niklas9/django-unixdatetimefield
sqlite> select created_at from mymodel;
1426967129
ここで興味を持っている場合、ソースコードです。
免責事項:私はこのpipパッケージの著者です。
が自動的に挿入および更新の使用この上で更新するには:DateTimeField型はUTCは保存する必要があります
created = DateTimeField(auto_now_add=True, editable=False, null=False, blank=False)
last_modified = DateTimeField(auto_now=True, editable=False, null=False, blank=False)
(あなたのDBの設定を確認し、私はそこにそれがある場合はPostgresから知っています)。
{{ object.created|date:'SHORT_DATETIME_FORMAT' }}
は、Unixエポックからの秒数
:あなたは経由して、テンプレートやフォーマットでl10n
を使用することができます
{{ object.created|date:'U' }}
をそれだけに適用される `get_db_prep_value`機能は、古くなっているhttps://docs.djangoproject.com/en/1.10/ref/templates/builtins/#date
を参照してください。 MySQLの
CoreDumpError
django 1.8の場合、from_db_valueを実装してデータベース値をオブジェクトの属性に変換する必要があります。 –