私のアプリケーションでは、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に切り替えてみましたが、同じ結果が得られました。
どうしたの?