python - Django queryset with Q object -


i want perform filter operation on queryset of form (x=true) or ((x=false) , (some other condition)). when try following command, error. suggestions.

operation

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')  # 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) 

error

typeerror: (<q: (and: ('mission__send_remaining_items__is', false))>, <q: (and: ('id__count__gte', <combinedexpression: f(mission__items_per_mission) + value(1)>))>) 

i want perform filter operation on queryset of form (x=true) or ((x=false) , (some other condition))

and , q objects when directly passed filter(), i.e.

.filter(q(), q()) 

but that's because of how filter() processes arguments, not result of combining 2 q objects.

anding q objects done via &:

.filter(q() & q()) 

so query becomes

.filter(q() | (q() & q())) 

Comments