私はDjango全体の新しい人で、自分自身がタイムゾーンの認識カーフルール全体にこだわっています。Djangoのタイムゾーン対応の設定で時間当たりのヒット数を照会
問題
私のようなレポートを作成するには、データベースクエリを実行したいと思います:
Time of day | Clicks
--------------------
12 am | 3
1 am | 12
2 am | 28
3 am | 48
...
を私はこれらを作成したユーザーのタイムゾーンに基づいてを示すことがしたいと思いますこのイベントは、システムのタイムゾーン設定ではありません。
現在のアプローチ
が(混乱を避けるために簡略化され)、次のモデルを考えると、適切なライブラリをインポートしていると仮定。
class Event(models.Model):
type = models.CharField()
created = models.DateTimeField()
user = models.CharField()
は、私はその後、私はデータベースを見て、タイムゾーンの情報が消えて、すべてUTC(as the first line of the documentation states)に保存することが表示されたらtests.py
def test_events_per_day(self):
# creates events in two timezones
date = datetime(2017, 1, 13, 12, 0, 0, 0, pytz.timezone('Pacific/Auckland'))
date2 = datetime(2017, 1, 13, 12, 0, 0, 0, pytz.timezone('UTC'))
Event.objects.create(
type='click',
created=date.strftime('%Y-%m-%dT%H:%M:00.%f%z'),
user = 'user 1'
)
Event.objects.create(
type='click',
created=date2.strftime('%Y-%m-%dT%H:%M:00.%f%z'),
user = 'user 2'
)
event_per_day_count = Event.objects \
.filter(type='click') \
.annotate(day=TruncDay('created')) \
.values('day') \
.annotate(events=Count('user', distinct = True)) \
.order_by('day')
self.assertEquals(over_time.first().get('events'), 2)
# FAIL: AssertionError: 1 != 2
# PASS if I use the same date for both
で次のように作成しました。
私は正規化を見ましたが、それを使って修正する方法はよく分かりませんでした。タイムゾーン情報をデータベースに格納し、変換するとコストがかかるようです。私の絶望では、私はさらにUSE_TZ = False
の設定を試みて、DjangoはMySQLがそれを好まないと言った。
前述したように、私はまだこれがどのように機能しているかを少し分かりやすくしているので、指針、コメント、または励ましの言葉を歓迎します。
いいえ、私の問題は、タイムゾーン情報を無視しながら、特定の時間のすべてのイベントを取得する方法がわかりません。私が言ったように、私はクリックを作成した人の数が、午前9時に、システムタイムゾーンではなくユーザーのタイムゾーンでどれくらいかを見たいと思っています。 –