2016-10-22 11 views
0

다른 테이블의 값에 따라 필터링하려고하면 나는 items 관련 UsrPosts 몇 가지 다음에 선택할 수있는 방법내가</p> <pre><code>class ItemFollowers(models.Model): item = models.ForeignKey(Items, models.DO_NOTHING, db_column='item') user = models.ForeignKey(AuthUser, models.DO_NOTHING, db_column='user') </code></pre> <p>그리고 다른 하나 둘 개 테이블이

class UsrPosts(models.Model): 
    item = models.ForeignKey('Items', models.DO_NOTHING, db_column='item') 
    # Some other fields 

입니다 user? 즉, (item0, user0), (item1, user0), (item5, user0)과 같은 ItemFollowers의 레코드를 가질 수 있습니다. 나는 사용자에 따라 UsrPosts를 필터링해야 (일명. request.user.id) 여기

UsrPostts

itms = ItemFollowers.objects.filter(user_id=request.user.id) 
qry = Q(item_id=itms[0].item.id) | ..... | Q(item_id=itms[N].item.id) 
posts = UsrPosts.objects.filter(qry) 

하나의 트랜잭션에서 그것을 얻을 수있는 몇 가지 필터 마법 거기에 얻을 수있는 비효율적 인 작동하지 않는 방법은 무엇입니까?

답변

1
itms = ItemFollowers.objects.filter(user_id=request.user.id).values‌​_list('item') 
posts = UsrPosts.objects.filter(item__in = itms) 
+0

고마워요. 첫 번째 줄에는 약간의 오류가 있습니다. 그것은'ItemFollowers.objects.filter (user_id = request.user.id) .values_list ('item')'이어야합니다. 하나의 거래에서 더 좋은 대답을 찾을 수 없다면이를 허용 된 답변으로 만들 것입니다. 백만 번 감사드립니다! –

+0

좋아, django_debug_toolbar를 사용하면 실제로이 두 줄을 실행하는 데 하나의 쿼리가 걸리는 것처럼 보입니다. 다시 한 번 감사드립니다! –