这是在 OSX 上运行的 Django 1.4.2,带有 PostgreSQL 数据库。
这是我的模型:
class RideRequest(models.Model):
user = models.ManyToManyField(User, related_name="ride_requests", symmetrical=False)
status = models.IntegerField(choices=STATUS_CHOICES)
在我对这个模型的所有过滤器调用中,我得到所有对象两次。
[10]: queryset = RideRequest.objects.filter(id=8)
[11]: for q in queryset: print q.id
8
8
我刚刚查看了数据库,每个条目只出现一次。任何想法为什么会发生这种情况?由于某些数据库限制,我不能轻易切换到 SQLite。
编辑:这是原始的 SQL 查询输出RideRequest.objects.filter(id=8).query
。它也返回两行而不是预期的行。可能是因为正在进行的过度 JOINing 吗?
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;