def search(terms, active=None, visibility=None, connected_adviser=None, offers=None): queryset = PropositionDissertation.objects.all() if terms: queryset = queryset.filter( Q(title__icontains=terms) | Q(description__icontains=terms) | Q(author__person__first_name__icontains=terms) | Q(author__person__middle_name__icontains=terms) | Q(author__person__last_name__icontains=terms) | Q(propositionoffer__offer_proposition__acronym__icontains=terms)) if active: queryset = queryset.filter(active=active) if offers: proposition_ids = proposition_offer.find_by_offers(offers).values( 'proposition_dissertation_id') queryset = queryset.filter(pk__in=proposition_ids) if visibility and connected_adviser: queryset = queryset.filter( Q(visibility=visibility) | Q(author=connected_adviser)) elif visibility: queryset = queryset.filter(visibility=visibility) return queryset.distinct()
def search_by_offers(offers): proposition_ids = proposition_offer.find_by_offers(offers).values('proposition_dissertation_id') return PropositionDissertation.objects.filter(pk__in=proposition_ids, active=True, visibility=True)