2014-10-01 147 views
0

我在django查詢集中使用排除鏈,但它沒有正確排除。Django查詢集中的多個排除

skipped_questions = QuestionSkipped.objects.filter(user=request.user) 
Question.objects.exclude(Q(id__in=skipped_questions) | Q(created_by=request.user)) 

兩個Q參數單獨工作正常,但是當我加入他們或只過濾Q(created_by=request.user)

我也試過雙雙跌破,但沒有任何工作。

Question.objects.exclude(id__in=skipped_questions, created_by=request.user) 
Question.objects.exclude(id__in=skipped_questions).exclude(created_by=request.user) 

在這種情況下使用多重排除的正確方法是什麼?

+1

確定,即'Question.objects.exclude(id__in = skipped_questions).exclude(CREATED_BY = request.user)'不給需要的結果呢?根據[文檔](https://docs.djangoproject.com/en/dev/ref/models/querysets/#django.db.models.query.QuerySet.exclude),在這種情況下,應用'OR'運算符。 – stalk 2014-10-01 13:32:36

+1

你想要什麼:「排除用戶創建的跳過的問題」,或「排除所有跳過的問題,並排除用戶創建的所有內容」?由於你的兩個選項做不同的事情。 – michaelb 2014-10-01 13:52:58

+0

您必須獲取跳過的項目ID列表。 skipped_questions = QuestionSkipped.objects.filter(user = request.user).values_list('id',flat = True) – 2014-10-01 17:37:30

回答

0

試試這個

skipped_questions = QuestionSkipped.objects.filter(user=request.user).values_list('id', flat=True) 
ques = Question.objects.exclude(id__in=skipped_questions) 
ques = ques.exclude(created_by=request.user)