我想对表单的查询集执行过滤操作 (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)>))>)
答案 0 :(得分:1)
直接传递给我想对表格的查询集(x = True)或((x = False)和(某些其他条件))执行过滤操作。
AND
时,{p> ,
仅Q
filter()
个对象,即
.filter(Q(), Q())
但这是因为filter()
处理其参数的方式,而不是组合两个Q
个对象的结果。
ANDing Q
个对象是通过&
完成的:
.filter(Q() & Q())
所以你的查询变成了
.filter(Q() | (Q() & Q()))