2013-03-26 2 views
0

Я застрял в этом состоянии: у меня есть таблица мест в db. и у меня также есть таблица рейтинга, в которой содержится рейтинг каждого местоположения, ссылающийся на идентификатор каждого местоположения.django - логика фильтра объектов

Я хочу, чтобы получить первые 5 местоположений и его рейтинг. поэтому я должен коснуться 2 таблиц сейчас: местоположения и рейтинг.

я сделал это:

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

, но это, кажется, неправильно, потому что all_locations является QuerySet, содержащий 5 мест и не в одном месте, поэтому она имеет 5 различных идентификаторов. но как я могу достичь этой цели ?: взять 5 мест и рейтинги каждого из этих 5 мест.

+0

Попробуйте цикл, чтобы перейти на эти 5? Вы пробовали этот подход? – CppLearner

+0

@CppLearner, нет, я еще этого не пробовал. вы имеете в виду, я перебираю 5 мест и запрашиваю рейтинг в зависимости от каждого идентификатора местоположения? но тогда я не переписываю запросы запросов на каждом шагу? – doniyor

ответ

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

+0

@doniyor Рад, что это помогло;) –

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