def search(request): """EXPENSIVE: Search with query param `query` throughout the database.""" MIN_LENGTH = 3 req_query = request.GET.get("query") if not req_query or len(req_query) < MIN_LENGTH: return Response({"message": "No query or too short!"}, status=400) # Search bodies by name and description bodies = query_search(request, MIN_LENGTH, Body.objects, ['name', 'description']) # Search events by name and description events = get_prioritized( query_search(request, MIN_LENGTH, Event.objects, ['name', 'description'])[:20], request) # Search users by only name: don't add anything else here users = query_search(request, MIN_LENGTH, UserProfile.objects, ['name', 'ldap_id', 'roll_no'])[:20] return Response({ "bodies": BodySerializerMin(bodies, many=True).data, "events": EventSerializer(events, many=True).data, "users": UserProfileSerializer(users, many=True).data })
def training_blog(cls, request): """Get Training Blog.""" queryset = BlogEntry.objects.filter( blog_url=settings.TRAINING_BLOG_URL) queryset = query_search(request, 3, queryset, ['title', 'content']) queryset = query_from_num(request, 20, queryset) return Response(BlogEntrySerializer(queryset, many=True).data)
def placement_blog(cls, request): """Get Placement Blog.""" queryset = BlogEntry.objects.filter(blog_url=settings.PLACEMENTS_URL) queryset = query_search(request, 3, queryset, ['title', 'content']) queryset = query_from_num(request, 20, queryset) return Response(BlogEntrySerializer(queryset, many=True).data)
def search(request): """EXPENSIVE: Search with query param `query` throughout the database.""" MIN_LENGTH = 3 req_query = request.GET.get("query") if not req_query or len(req_query) < MIN_LENGTH: return Response({"message": "No query or too short!"}, status=400) types = ('bodies', 'events', 'users') req_types = request.GET.get('types') if req_types: types = tuple(req_types.split(',')) # Include only the types we want bodies, events, users = ([] for i in range(3)) # Search bodies by name and description if 'bodies' in types: bodies = query_search(request, MIN_LENGTH, Body.objects, ['name', 'description'], 'bodies', order_relevance=True) # Search events by name and description if 'events' in types: events = get_prioritized( query_search(request, MIN_LENGTH, Event.objects, ['name', 'description'], 'events')[:20], request) # Search users by only name: don't add anything else here if 'users' in types: users = query_search(request, MIN_LENGTH, UserProfile.objects.filter(active=True), ['name', 'ldap_id', 'roll_no'], 'profiles', order_relevance=True)[:20] return Response({ "bodies": BodySerializerMin(bodies, many=True).data, "events": EventSerializer(events, many=True).data, "users": UserProfileSerializer(users, many=True).data })
def news_feed(request): """Get News feed.""" # Filter for body body = request.GET.get('body') if body is not None: queryset = NewsEntry.objects.filter(body__id=body) else: queryset = NewsEntry.objects.all() # Paging and search queryset = query_search(request, 3, queryset, ['title', 'content']) queryset = query_from_num(request, 20, queryset) # Eagerly load data queryset = NewsEntrySerializer.setup_eager_loading(queryset) # Get sliced news items return Response( NewsEntrySerializer(queryset, many=True, context={ 'request': request }).data)