コード例 #1
0
    def post(self, request):
        form = SearchPostsForm(data=request.body or '{}')

        if form.is_valid() is False:
            return dict(errors=get_all_form_errors(form))

        data = form.cleaned_data

        results_per_page = settings.RESULTS_PER_PAGE
        page = self.get_page(data)
        column = self.get_order_by_column(data)

        posts_queryset = Post.objects
        posts_queryset = self.apply_keyword_filter(posts_queryset, data)
        posts_queryset = self.apply_like_filters(posts_queryset, data)
        posts_queryset = posts_queryset.order_by(column)

        #posts_queryset = posts_queryset.distinct()

        offset = self.get_offset(data)
        posts_queryset = posts_queryset.values()
        posts = list(posts_queryset[offset:offset + results_per_page])
        posts = self.format_posts(posts)

        count = posts_queryset.count()
        max_page = (count / results_per_page) + 1
        return dict(
            posts=posts,
            page=page,
            count=posts_queryset.count(),
            maxPage=max_page
        )
コード例 #2
0
    def post(self, request):

        form = SearchGroupsForm(data=request.body)

        if form.is_valid() is False:
            return dict(errors=get_all_form_errors(form))

        data = form.cleaned_data

        results_per_page = settings.RESULTS_PER_PAGE
        offset = self.get_offset(data)
        column = self.get_order_by_column(data)

        gids_queryset = Group.objects
        gids_queryset = self.apply_basic_filters(gids_queryset, data)
        gids_queryset = self.apply_audience_filters(gids_queryset, data)
        gids_queryset = self.apply_region_filters(gids_queryset, data)
        gids_queryset = gids_queryset.order_by(column)
        gids_queryset = gids_queryset.distinct()
        gids_queryset = gids_queryset.values_list('gid', flat=True)
        gids = list(gids_queryset[offset:offset + results_per_page])

        fields = self.get_related_field_names(Group, False)
        fields.extend(self.get_related_field_names(Audience))
        groups = list(
            Group.objects.filter(gid__in=gids).select_related('audience').order_by(column).values(*fields)
        )

        city_traffic = self.get_city_traffic(gids, data)
        country_traffic = self.get_country_traffic(gids, data)
        for group in groups:
            group['country_traffic'] = country_traffic.get(group['gid'])
            group['city_traffic'] = city_traffic.get(group['gid'])

        return dict(
            groups=groups,
            count=len(groups)
        )