这是在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。
编辑:这是RideRequest.objects.filter(id=8).query
的原始SQL查询输出。它也返回两行而不是预期的一行。可能是因为正在进行过度的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;
答案 0 :(得分:1)
我怀疑在模型Meta部分中,您已经设置了由“外部”字段(相关模型'station__departure_time'
)排序的模型。当您编写查询时,django会将连接添加到此“外部”字段以进行排序。
在这种情况下,您应该使用distinct()
方法或使用.order_by()