followers.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. from django.http import Http404
  2. from ...core.shortcuts import paginate, pagination_dict
  3. from ..online.utils import make_users_status_aware
  4. from ..serializers import UserCardSerializer
  5. class Followers:
  6. def __init__(self, request, profile, page=0, search=None):
  7. queryset = self.get_queryset(profile).select_related("rank").order_by("slug")
  8. if not request.user.is_staff:
  9. queryset = queryset.filter(is_active=True)
  10. if search:
  11. name_starts_with = search.strip().lower()
  12. if name_starts_with:
  13. queryset = queryset.filter(slug__startswith=name_starts_with)
  14. else:
  15. raise Http404()
  16. list_page = paginate(
  17. queryset,
  18. page,
  19. request.settings.users_per_page,
  20. request.settings.users_per_page_orphans,
  21. )
  22. make_users_status_aware(request, list_page.object_list)
  23. self.users = list_page.object_list
  24. self.paginator = pagination_dict(list_page)
  25. def get_queryset(self, profile):
  26. return profile.followed_by
  27. def get_frontend_context(self):
  28. context = {"results": UserCardSerializer(self.users, many=True).data}
  29. context.update(self.paginator)
  30. return context
  31. def get_template_context(self):
  32. return {"followers": self.users, "count": self.paginator["count"]}