def get_queryset(self): qs = self.get_initial_queryset() order_by = self.request.GET.get('o') order_dir = self.request.GET.get('d') # Get ordering field name if order_by == 'name': order = 'name' elif order_by == 'actioncount': order = 'actioncount' elif order_by == 'avg': order = 'avg' else: order = 'usercount' # Get ordering direction (asc/desc) if order_dir == 'asc': prefix = '' else: prefix = '-' # Allow simplified searching search_term = self.request.GET.get('q') if search_term is not None: qs = qs.filter(name__icontains=search_term) # Less common sorting options that database cannot handle if order == 'actioncount': if prefix == '': sqs = sorted(qs, key=lambda x: x.target_actions.count()) else: sqs = sorted(qs, key=lambda x: x.target_actions.count(), reverse=True) return sqs elif order == 'avg': if prefix == '': sqs = sorted(qs, key=lambda x: float(x.avg_points)) else: sqs = sorted(qs, key=lambda x: float(x.avg_points), reverse=True) return sqs elif order == 'name': if prefix == '': sqs = sort_by_locale(qs, key=lambda x: x.__unicode__()) else: sqs = sort_by_locale(qs, key=lambda x: x.__unicode__(), reverse=True) return sqs return qs.order_by("{}{}".format(prefix, order))
def get_queryset(self): if self.request.QUERY_PARAMS.get('pk'): pk = self.request.QUERY_PARAMS.get('pk') location = get_object_or_404(Location, pk=pk) cached_qs = cache.get(location.slug + '_forum', None) if cached_qs is None or not settings.USE_CACHE: queryset = Discussion.objects \ .filter(location__pk__in=location.get_children_id_list()) queryset = queryset | Discussion.objects.filter( location=location) cache.set(location.slug + '_forum', queryset, timeout=None) else: queryset = cached_qs else: queryset = Discussion.objects.all() if self.request.QUERY_PARAMS.get('haystack'): haystack = self.request.QUERY_PARAMS.get('haystack') queryset = queryset.filter(question__icontains=haystack) category_pk = self.request.QUERY_PARAMS.get('category') if category_pk and category_pk != 'all': category = get_object_or_404(ForumCategory, pk=category_pk) queryset = queryset.filter(category=category) status = self.request.QUERY_PARAMS.get('state') if status and status != 'all': s = True if status == 'True' else False queryset = queryset.filter(status=s) time_delta = None time = self.request.QUERY_PARAMS.get('time') if time == 'day': time_delta = datetime.date.today() - datetime.timedelta(days=1) if time == 'week': time_delta = datetime.date.today() - datetime.timedelta(days=7) if time == 'month': time_delta = datetime.date.today() - relativedelta(months=1) if time == 'year': time_delta = datetime.date.today() - relativedelta(years=1) if time_delta: queryset = queryset.filter(date_created__gte=time_delta) sortby = self.request.QUERY_PARAMS.get('sortby') if sortby == 'question': return sort_by_locale(queryset, lambda x: x.question, get_language()) elif sortby == 'oldest': return queryset.order_by('date_created') elif sortby == 'category': return queryset.order_by('category__name') elif sortby == 'username': l = list(queryset) # Order by last name - we assume that every user has full name l.sort(key=lambda x: x.creator.get_full_name().split(' ')[1]) return l return queryset.order_by('-date_created')
def get_queryset(self): if self.request.QUERY_PARAMS.get('pk'): pk = self.request.QUERY_PARAMS.get('pk') location = get_object_or_404(Location, pk=pk) cached_qs = cache.get(location.slug + '_forum', None) if cached_qs is None or not settings.USE_CACHE: queryset = Discussion.objects \ .filter(location__pk__in=location.get_children_id_list()) queryset = queryset | Discussion.objects.filter(location=location) cache.set(location.slug + '_forum', queryset, timeout=None) else: queryset = cached_qs else: queryset = Discussion.objects.all() if self.request.QUERY_PARAMS.get('haystack'): haystack = self.request.QUERY_PARAMS.get('haystack') queryset = queryset.filter(question__icontains=haystack) category_pk = self.request.QUERY_PARAMS.get('category') if category_pk and category_pk != 'all': category = get_object_or_404(ForumCategory, pk=category_pk) queryset = queryset.filter(category=category) status = self.request.QUERY_PARAMS.get('state') if status and status != 'all': s = True if status == 'True' else False queryset = queryset.filter(status=s) time_delta = None time = self.request.QUERY_PARAMS.get('time') if time == 'day': time_delta = datetime.date.today() - datetime.timedelta(days=1) if time == 'week': time_delta = datetime.date.today() - datetime.timedelta(days=7) if time == 'month': time_delta = datetime.date.today() - relativedelta(months=1) if time == 'year': time_delta = datetime.date.today() - relativedelta(years=1) if time_delta: queryset = queryset.filter(date_created__gte=time_delta) sortby = self.request.QUERY_PARAMS.get('sortby') if sortby == 'question': return sort_by_locale(queryset, lambda x: x.question, get_language()) elif sortby == 'oldest': return queryset.order_by('date_created') elif sortby == 'category': return queryset.order_by('category__name') elif sortby == 'username': l = list(queryset) # Order by last name - we assume that every user has full name l.sort(key=lambda x: x.creator.get_full_name().split(' ')[1]) return l return queryset.order_by('-date_created')
def get_queryset(self): pk = self.request.QUERY_PARAMS.get('pk', None) if pk: try: location = Location.objects.get(pk=pk) key = "{}_{}_{}".format(location.slug, translation.get_language(), 'sub') cached_qs = redis_cache.get(key, None) if cached_qs is None or not settings.USE_CACHE: queryset = location.location_set.all() redis_cache.set(key, queryset) else: queryset = cached_qs except Location.DoesNotExist: queryset = Location.objects.all() return sort_by_locale(queryset, lambda x: x.__unicode__(), translation.get_language()) return sort_by_locale(Location.objects.all(), lambda x: x.name, translation.get_language())
def get_queryset(self): try: pk = int(self.request.QUERY_PARAMS.get('pk')) except (ValueError, UnicodeError): raise Http404 location = get_object_or_404(Location, pk=pk) key = "{}_{}_sub".format(location.slug, translation.get_language()) queryset = redis_cache.get(key) if queryset is None: queryset = location.location_set.all() redis_cache.set(key, queryset) return sort_by_locale(queryset, lambda x: x.name)
def get_queryset(self): if self.request.QUERY_PARAMS.get('pk'): pk = self.request.QUERY_PARAMS.get('pk') location = get_object_or_404(Location, pk=pk) cached_qs = cache.get(location.slug + '_polls', None) if cached_qs is None or not settings.USE_CACHE: newset = Poll.objects \ .filter(location__pk__in=location.get_children_id_list()) newset = newset | Poll.objects.filter(location=location) cache.set(location.slug + '_polls', newset, timeout=None) else: newset = cached_qs else: newset = Poll.objects.all() if self.request.QUERY_PARAMS.get('haystack'): haystack = self.request.QUERY_PARAMS.get('haystack') newset = newset.filter(title__icontains=haystack) time_delta = None time = self.request.QUERY_PARAMS.get('time') if time == 'day': time_delta = datetime.date.today() - datetime.timedelta(days=1) if time == 'week': time_delta = datetime.date.today() - datetime.timedelta(days=7) if time == 'month': time_delta = datetime.date.today() - relativedelta(months=1) if time == 'year': time_delta = datetime.date.today() - relativedelta(years=1) if time_delta: newset = newset.filter(date_created__gte=time_delta) sortby = self.request.QUERY_PARAMS.get('sortby') if sortby == 'question': return sort_by_locale(newset, lambda x: x.question, get_language()) elif sortby == 'oldest': return newset.order_by('date_created') elif sortby == 'username': l = list(newset) # Order by last name - we assume that every user has full name l.sort(key=lambda x: x.creator.get_full_name().split(' ')[1]) return l return newset.order_by('-date_created')
def get_queryset(self): if self.request.QUERY_PARAMS.get('pk'): pk = self.request.QUERY_PARAMS.get('pk') location = get_object_or_404(Location, pk=pk) cached_qs = cache.get(location.slug+'_polls', None) if cached_qs is None or not settings.USE_CACHE: newset = Poll.objects \ .filter(location__pk__in=location.get_children_id_list()) newset = newset | Poll.objects.filter(location=location) cache.set(location.slug+'_polls', newset, timeout=None) else: newset = cached_qs else: newset = Poll.objects.all() if self.request.QUERY_PARAMS.get('haystack'): haystack = self.request.QUERY_PARAMS.get('haystack') newset = newset.filter(title__icontains=haystack) time_delta = None time = self.request.QUERY_PARAMS.get('time') if time == 'day': time_delta = datetime.date.today() - datetime.timedelta(days=1) if time == 'week': time_delta = datetime.date.today() - datetime.timedelta(days=7) if time == 'month': time_delta = datetime.date.today() - relativedelta(months=1) if time == 'year': time_delta = datetime.date.today() - relativedelta(years=1) if time_delta: newset = newset.filter(date_created__gte=time_delta) sortby = self.request.QUERY_PARAMS.get('sortby') if sortby == 'question': return sort_by_locale(newset, lambda x: x.question, get_language()) elif sortby == 'oldest': return newset.order_by('date_created') elif sortby == 'username': l = list(newset) # Order by last name - we assume that every user has full name l.sort(key=lambda x: x.creator.get_full_name().split(' ')[1]) return l return newset.order_by('-date_created')
def news_tags(self): tags = [] for news in self.news_set.all(): tags += [x for x in news.tags.all() if x not in tags] return sort_by_locale(tags, key=lambda x: x.name)
def get(self, request): # Id lokacji, z której pobieramy wpisy try: location_pk = int(request.QUERY_PARAMS.get('pk')) except (ValueError, TypeError): location_pk = None # Numer strony do wyświetlenia try: page = int(request.QUERY_PARAMS.get('page')) except (ValueError, TypeError): page = 1 # Ilość elementów na stronę try: per_page = int(request.QUERY_PARAMS.get('per_page')) except (ValueError, TypeError): per_page = self.paginate_by # Rodzaj typu zawartości (albo wszystkie) content = request.QUERY_PARAMS.get('content', 'all') # Przedział czasowy do przeszukania time = get_time_difference(request.QUERY_PARAMS.get('time', 'any')) # Wyszukiwanie po tytułach wpisów haystack = request.QUERY_PARAMS.get('haystack') # Wyszukiwanie poprzez ID kategorii (jeżeli dotyczy) try: category = int(request.QUERY_PARAMS.get('category')) except (ValueError, TypeError): category = None location = get_object_or_404(Location, pk=location_pk) content_objects = location.content_objects() if content != 'all': content_objects = [x for x in content_objects if x['type']==content] if time is not None: content_objects = [x for x in content_objects\ if x['date_created'] >= time.isoformat()] if haystack: content_objects = [x for x in content_objects \ if haystack.lower() in x['title'].lower()] if category is not None: content_objects = [x for x in content_objects if x['category']['pk']==category] # Opcje sortowania wyników (dotyczy konkretnych obiektów) sortby = self.request.QUERY_PARAMS.get('sortby') if sortby == 'title': content_objects = sort_by_locale(content_objects, lambda x: x['title'], translation.get_language()) elif sortby == 'oldest': content_objects.sort(key=lambda x: x['date_created']) elif sortby == 'newest': content_objects.sort(key=lambda x: x['date_created'], reversed=True) elif sortby == 'user': content_objects.sort(key=lambda x: x['creator']['name'].split(' ')[1]) paginator = Paginator(content_objects, per_page) try: items = paginator.page(page) except EmptyPage: items = paginator.page(1) serializer = ContentPaginatedSerializer(items, context={'request': request}) return Response(serializer.data)
def get_queryset(self): return sort_by_locale( super(LocationLocaleManager, self).get_queryset(), lambda x: x.__unicode__(), get_language())
def followed_locations(self): """ The method returns a list of locations follows by the user. """ follows = [x for x in following(self.user, Location) if x is not None] return sort_by_locale(follows, lambda x: x.name, get_language())
def get(self, request): # Location Id from which we gather entries try: location_pk = int(request.QUERY_PARAMS.get('pk')) except (ValueError, TypeError): location_pk = None # Number of page that is going to be displayed try: page = int(request.QUERY_PARAMS.get('page')) except (ValueError, TypeError): page = 1 # Number of elements on the site try: per_page = int(request.QUERY_PARAMS.get('per_page')) except (ValueError, TypeError): per_page = self.paginate_by # Type of content (or all) content = request.QUERY_PARAMS.get('content', 'all') # Time duration for search time = get_time_difference(request.QUERY_PARAMS.get('time', 'any')) # Search by entries' titles haystack = request.QUERY_PARAMS.get('haystack') # Search through category ID (if applicable) try: category = int(request.QUERY_PARAMS.get('category')) except (ValueError, TypeError): category = None location = get_object_or_404(Location, pk=location_pk) content_objects = location.content_objects() if content != 'all': content_objects = [ x for x in content_objects if x['type'] == content ] if time is not None: content_objects = [x for x in content_objects\ if x['date_created'] >= time.isoformat()] if haystack: content_objects = [x for x in content_objects \ if haystack.lower() in x['title'].lower()] if category is not None: content_objects = [ x for x in content_objects if x['category']['pk'] == category ] # Sort results option (Opcje sortowania wyników (is applicable to concrete objects) sortby = self.request.QUERY_PARAMS.get('sortby') if sortby == 'title': content_objects = sort_by_locale(content_objects, lambda x: x['title'], translation.get_language()) elif sortby == 'oldest': content_objects.sort(key=lambda x: x['date_created']) elif sortby == 'newest': content_objects.sort(key=lambda x: x['date_created'], reversed=True) elif sortby == 'user': content_objects.sort( key=lambda x: x['creator']['name'].split(' ')[1]) paginator = Paginator(content_objects, per_page) try: items = paginator.page(page) except EmptyPage: items = paginator.page(1) serializer = ContentPaginatedSerializer(items, context={'request': request}) return Response(serializer.data)
def followed_locations(self): """ Metoda zwraca listę lokalizacji obserwowanych przez użytkownika. """ follows = [x for x in following(self.user, Location) if x is not None] return sort_by_locale(follows, lambda x: x.name, get_language())
def get(self, request): # Location Id from which we gather entries try: location_pk = int(request.QUERY_PARAMS.get('pk')) except (ValueError, TypeError): location_pk = None # Number of page that is going to be displayed try: page = int(request.QUERY_PARAMS.get('page')) except (ValueError, TypeError): page = 1 # Number of elements on the site try: per_page = int(request.QUERY_PARAMS.get('per_page')) except (ValueError, TypeError): per_page = self.paginate_by # Type of content (or all) content = request.QUERY_PARAMS.get('content', 'all') # Time duration for search time = get_time_difference(request.QUERY_PARAMS.get('time', 'any')) # Search by entries' titles haystack = request.QUERY_PARAMS.get('haystack') # Search through category ID (if applicable) try: category = int(request.QUERY_PARAMS.get('category')) except (ValueError, TypeError): category = None location = get_object_or_404(Location, pk=location_pk) content_objects = location.content_objects() if content != 'all': content_objects = [x for x in content_objects if x['type'] == content] if time is not None: content_objects = [x for x in content_objects\ if x['date_created'] >= time.isoformat()] if haystack: content_objects = [x for x in content_objects \ if haystack.lower() in x['title'].lower()] if category is not None: content_objects = [x for x in content_objects if x['category']['pk'] == category] # Sort results option (Opcje sortowania wyników (is applicable to concrete objects) sortby = self.request.QUERY_PARAMS.get('sortby') if sortby == 'title': content_objects = sort_by_locale(content_objects, lambda x: x['title'], translation.get_language()) elif sortby == 'oldest': content_objects.sort(key=lambda x: x['date_created']) elif sortby == 'newest': content_objects.sort(key=lambda x: x['date_created'], reversed=True) elif sortby == 'user': content_objects.sort( key=lambda x: x['creator']['name'].split(' ')[1]) paginator = Paginator(content_objects, per_page) try: items = paginator.page(page) except EmptyPage: items = paginator.page(1) serializer = ContentPaginatedSerializer(items, context={'request': request}) return Response(serializer.data)
def get_queryset(self): return sort_by_locale(super(LocationLocaleManager, self).get_queryset(), lambda x: x.__unicode__(), translation.get_language())