2012-10-22 2 views
3

내가 장고를 사용하고의 검색어 장고에서 제외하고있다 지정된 사용자에 대한 PR 는 지금, 나는이 일을 해요 :두 개의 클래스를 다른 모델의 검색어 세트에서 참조 그 결과

입니다
jq = JQ.objects.filter(somefield=someval) 
pr = PR.objects.filter(user=request.user.id) 
for r in pr: 
    jq = jq.exclude(id=r.Jq.id) 

, 내가 얻을 수있는 모든 JQS는 다음 특정 사용자를 참조하는 모든의 PR을 잡아. 나는 모든 PR을 반복하고 적어도 하나의 PR이 참조하는 JQ를 제외합니다. 그러나 이것은 대단히 비효율적입니다. 어떤 제안?

(Btw, 원시 SQL에서 사용자의 PR 임시 테이블을 만든 다음 해당 임시 테이블을 JQ에 조인하고 사용자 PR에 일치하지 않는 행만 유지하면됩니다.)

도움 주셔서 감사합니다.

답변

2
pr = PR.objects.filter(user=request.user.id).values_list('jq__id', flat=True) 
jq = JQ.objects.filter(somefield=someval).exclude(id__in=pr) 

첫 번째 줄에는 ID 목록 (예 : [12, 14, 110])이 반환됩니다. 그런 다음 제외에 해당 ID를 사용합니다.

+0

감사합니다. 완벽하게 작동했습니다. – DynamicViewer

+0

좋아요. 매력처럼 일했습니다. 감사! –

관련 문제