これは、PostgreSQL データベースを使用して、OSX 上で動作する Django 1.4.2 です。
これが私のモデルです:
class RideRequest(models.Model):
user = models.ManyToManyField(User, related_name="ride_requests", symmetrical=False)
status = models.IntegerField(choices=STATUS_CHOICES)
このモデルのすべてのフィルター呼び出しで、すべてのオブジェクトを 2 回取得します。
[10]: queryset = RideRequest.objects.filter(id=8)
[11]: for q in queryset: print q.id
8
8
データベースを調べたところ、すべてのエントリが一度しか存在しません。なぜこれが起こるのでしょうか?特定の DB 制約のために、SQLite に簡単に切り替えることができません。
編集: これは の生の SQL クエリ出力ですRideRequest.objects.filter(id=8).query
。これも、予想される行ではなく 2 つの行を返します。進行中の過剰な JOIN が原因でしょうか?
SELECT "rides_riderequest"."id", "rides_riderequest"."ride_id",
…
FROM "rides_riderequest"
LEFT OUTER JOIN "rides_riderequest_ride_request_stations"
ON ("rides_riderequest"."id" = "rides_riderequest_ride_request_stations"."riderequest_id")
LEFT OUTER JOIN "rides_riderequeststation"
ON ("rides_riderequest_ride_request_stations"."riderequeststation_id" =
"rides_riderequeststation"."id") WHERE "rides_riderequest"."id" = 8
ORDER BY "rides_riderequeststation"."departure_time_min" DESC;