django - 对象过滤逻辑

时间:2013-03-26 02:45:49

标签: python database django

我陷入了这种状态:我在db中有位置表。我还有一个评级表,其中包含每个位置的ID对每个位置的ID进行引用。

现在我想获得前5个地点及其评级。所以我现在必须触摸2个表:位置和评级。

我这样做了:

all_locations = Locations.objects.all()[:5]
all_ratings = Rating.objects.filter(of_location=all_locations.id)

但这似乎是错误的,因为all_locations是一个包含5个位置而不是一个位置的查询集,因此它有5个不同的ID。但我怎样才能达到这个目标?:在这5个地点中分别取5个地点和等级。

2 个答案:

答案 0 :(得分:2)

你可以尝试

all_locations = Locations.objects.all()[:5]
all_ratings = Rating.objects.filter(of_location__id__in=[location.id for location in all_locations])

答案 1 :(得分:2)

您可以使用in表示该值包含在列表中:

locations_ids = [location.id for location in Locations.objects.all()[:5]]
all_ratings = Rating.objects.filter(location__id__in=locations_ids)