def manage(request): idea_qs = Idea.objects.all().select_related() sort = request.GET.get('sort') available_sorts = { 'num_votes': '-num_votes', 'popular': '', } if sort and sort in available_sorts: if sort == 'popular': idea_qs = order_by_popular(idea_qs) else: idea_qs = idea_qs.order_by(available_sorts[sort]) paginator = Paginator(idea_qs, settings.TORCH_PAGINATION) page = request.GET.get('page') try: ideas = paginator.page(page) except PageNotAnInteger: ideas = paginator.page(1) except EmptyPage: ideas = paginator.page(paginator.num_pages) context = RequestContext(request, { 'sort': sort, 'ideas': ideas, }) return render_to_response( 'idea/manage.html', context_instance=context, )
def test_order_by_popular(self): user = User.objects.create() idea1 = Idea.objects.create(author=user, tag=CREATIVITY) idea2 = Idea.objects.create(author=user, tag=CREATIVITY) now = datetime.now() yesterday = now - timedelta(days=1) idea1.created = yesterday idea1.save() Vote.objects.create(voter=user, idea=idea1) self.assertEqual(order_by_popular(Idea.objects.all()), [idea1, idea2]) # Now add one vote to the newer one and watch the order change. Vote.objects.create(voter=User.objects.create(username="******"), idea=idea2) self.assertEqual(order_by_popular(Idea.objects.all()), [idea2, idea1])