0

これは、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;
4

1 に答える 1

1

モデルメタセクションで、「外部」フィールド(関連モデル)で順序付けられたモデルを設定したと思われます'station__departure_time'。クエリを書くとき、djangoはソートの目的でこの「外部」フィールドに結合します。

この場合、distinct()メソッドを使用するか、を使用して注文を明確にする必要があります.order_by()

于 2012-11-29T14:21:27.860 に答える