0

这是在 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;
4

1 回答 1

1

我怀疑在模型 Meta 部分中,您设置了按“外部”字段(相关模型'station__departure_time')排序的模型。当您编写查询时,django 会连接到此“外部”字段以进行排序。

在这种情况下,您应该使用distinct()方法或使用清除排序.order_by()

于 2012-11-29T14:21:27.860 回答