带Q对象的Django查询集

时间:2016-01-29 07:32:42

标签: python django django-queryset

我想对表单的查询集执行过滤操作 (x = True)或((x = False)和(某些其他条件))。当我尝试以下命令时,我收到一个错误。任何建议。

操作

Item.objects.filter(mission_id__in=mission_ids).exclude(id__in=attempted_items).filter(
            answers_left_count__gte=1, is_active=True, is_test_data=False
    ).values_list("mission_id", 'mission__items_per_mission', 'mission__send_remaining_items').annotate(
            Count('id')  # Get item count
    ).filter(Q(mission__send_remaining_items=True) | (
    Q(mission__send_remaining_items=False), Q(id__count__gte=F('mission__items_per_mission') + 1))).values_list(
            "mission_id", flat=True)

错误

TypeError: (<Q: (AND: ('mission__send_remaining_items__is', False))>, <Q: (AND: ('id__count__gte', <CombinedExpression: F(mission__items_per_mission) + Value(1)>))>)

1 个答案:

答案 0 :(得分:1)

  

我想对表格的查询集(x = True)或((x = False)和(某些其他条件))执行过滤操作。

直接传递给AND时,{p> ,Q filter()个对象,即

.filter(Q(), Q())

但这是因为filter()处理其参数的方式,而不是组合两个Q个对象的结果。

ANDing Q个对象是通过&完成的:

.filter(Q() & Q())

所以你的查询变成了

.filter(Q() | (Q() & Q()))