3

私のアプリケーションでは、PostgreSQL データベースにビューを作成し、そのビューを Django の非管理モデルにマップしました。

何らかの理由で、Django でこのモデルを照会すると、タプルの 1 つが正しくない結果を返します。

これは私のCREATE VIEWコードです:

  CREATE VIEW test_view_a AS
  SELECT ROW_NUMBER() OVER (ORDER BY account_id, person_id)::int AS id,
  AVG(EXTRACT(epoch FROM date_trunc('second', meeting_time)))::int AS avg_meeting_time,
  AVG(EXTRACT(epoch FROM date_trunc('second', office_time)))::int AS avg_office_time,
  AVG(EXTRACT(epoch FROM date_trunc('second', traffic_time)))::int AS avg_traffic_time,
  account_id,
  person_id
  FROM test_view_b
  GROUP BY account_id, person_id
  ORDER BY account_id, person_id;

これは、データベースで直接クエリを実行したときに返されるデータです。

 id | avg_meeting_time | avg_office_time | avg_traffic_time | account_id | person_id 
----+------------------+-----------------+------------------+------------+-----------
  1 |            64800 |               0 |             1514 |          1 |         8
  2 |            14400 |               0 |            29290 |          3 |         9
  3 |            14400 |               0 |                0 |          3 |        10
(3 rows)

このビューを Django でクエリすると、2 行目と 3 行目は正しく返されますが、1 行目は avg_meeting_time が -1144800、avg_traffic_time が 1202400 で返されます。

>>> from test.models import *
>>> queryset = ViewA.objects.all()
>>> '%i %i' % (queryset[0].avg_meeting_time, queryset[0].avg_traffic_time)
'-1144800 1202400'

django.db.connection オブジェクトを介してこのビューを直接クエリしようとしましたが、この方法でビューを生成するクエリを実行しようとしました。結果は常に同じで、データベース上のものとは異なります。

問題があれば、PostGIS で空間データベースを使用しています。バックエンドをpsycopg2に切り替えてみましたが、同じ結果が得られました。

どうしたの?

4

2 に答える 2

1

あなたをデバッグしてみてください

>>> from test.models import *
>>> queryset = ViewA.objects.all()
>>> '%i %i' % (queryset[0].avg_meeting_time, queryset[0].avg_traffic_time)

from django.db import connection
connection.queries

そしてBurhan Khalidに同意する - モデルは役に立つだろう

于 2012-07-07T17:38:32.197 に答える
0

自分の設定を確認する必要があります.py 正しいロケールを持っていますか?

TIME_ZONE = 'アメリカ/シカゴ'

于 2014-01-13T10:34:09.467 に答える