/ / Django、DRF、PostgreSQLの適切な設定のタイムゾーン - django、timezone、django-rest-framework

Django、DRF、PostgreSQLのタイムゾーン設定 - django、timezone、django-rest-framework

私はDjango 1.8でタイムゾーンを設定しました(現在のタイムゾーンはUTC + 1またはBSTです):

TIME_ZONE = "Europe/London"
USE_I18N = True
USE_L10N = True
USE_TZ = True

私は私のモデルにタイムスタンプ属性を持っています:

class NodeGPS(models.Model):
node_id = models.ForeignKey(Node)
timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
gps_latitude = models.FloatField(null=True, blank=True)
gps_longitude = models.FloatField(null=True, blank=True)

私はDjango Rest Framework 3.4を持っています。0、私はDRFのWebインターフェイスのタイムスタンプを介してデータを投稿するので、私の現在の時間(UTC + 1)から1時間前に自動的にUTCに設定されています。しかし、PostgreSQLのタイムスタンプフィールドはUTC + 1に設定されています。しかし、DRF Webインターフェイスでは、常にUTCで時刻が表示されます。

どのような奇妙な行動。 その理由は何ですか?

事前に感謝の意を表します!

回答:

回答№1は2

時間はローカルタイムゾーンに変換されますがテンプレートとフォームでは、シリアライザ用に変換されません(したがって、クライアントがアップロードしたものであれば、オブジェクト作成時以外は通常UTCです)。 APIを使用する人は誰でも、タイムゾーンを処理する独自の方法でクライアントを使用することが前提です。

解決策は、正しいタイムゾーンに変換するカスタムdatetimeフィールドを作成することです。ここをクリック: DjangoRestFramework ModelSerializer DateTimeFieldは、オブジェクト作成時の現在のタイムゾーンに変換するだけです

PostgreSQLのタイムスタンプフィールドに注意してください。これは、サーバーが(ドキュメントから)考えている時間帯に変換されたことを示すに過ぎません。

すべてのタイムゾーン対応の日付と時刻は、UTCで内部的に保存されます。これらは、クライアントに表示される前に、timezone構成パラメーターで指定されたゾーンで現地時間に変換されます。