2014-10-01 120 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)