def expedient_list(request): form = ExpedientListFilterForm(request.GET) expedients = ExpedientService.find_all() if form.is_valid(): search_term = form.cleaned_data["keyword"] or None selected_branch_id = form.cleaned_data["branch"] or None selected_headquarters_id = form.cleaned_data["headquarters"] or None selected_state = form.cleaned_data["state"] or None selected_customers = form.cleaned_data["customers"] or None if search_term: expedients = expedients.filter(Q(id__icontains=search_term) | Q(description__icontains=search_term)) # Remember -> -1 equals "without" and None is "all" if selected_branch_id: if selected_branch_id == "-1": # Filter expedients without branch expedients = expedients.filter(phase__isnull=True) else: expedients = expedients.filter(phase__law_branch__id=selected_branch_id) if selected_headquarters_id: if selected_headquarters_id == "-1": # Filter expedients without headquarters expedients = expedients.filter(headquarters__isnull=True) else: expedients = expedients.filter(headquarters__id=selected_headquarters_id) if selected_state: expedients = expedients.filter(state=selected_state) if selected_customers: expedients = expedients.filter( expperrol__person__in=selected_customers, expperrol__role__text_help__iexact="CLIENTE" ).distinct() return render_to_response( "expedient/list.html", {"expedients": expedients, "filter_form": form}, context_instance=RequestContext(request) )