2013-03-26 65 views
0

我被困在这种状态:我有分贝位置表。我也有评级表,其中包含每个位置的ID引用每个位置的评级。django - 对象过滤器逻辑

现在我想获得前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个位置中的每一个的评分。

+0

尝试了一个循环来对这些5?你有没有尝试过这种方法? – CppLearner 2013-03-26 02:52:59

+0

@CppLearner,不,我没有尝试过。你的意思是,我循环了5个地点,并根据每个地点的身份证要求评分?但那么我不会在每一步覆盖收视率查询集? – doniyor 2013-03-26 02:57:47

回答

2

您可以使用in来指示值包含在一个列表:

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

很好,你救了我!!!让我看看这个.. – doniyor 2013-03-26 03:01:21

+0

@ doniyor很高兴它帮助;) – 2013-03-26 03:10:34

2

您可以尝试

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

很酷,让我试试 – doniyor 2013-03-26 03:01:40