summaryrefslogtreecommitdiffstats
path: root/activities/views/follows.py
diff options
context:
space:
mode:
authorGabriel Rodríguez Alberich2022-12-17 01:06:29 +0100
committerGitHub2022-12-16 17:06:29 -0700
commitfb2eea956ef7416eb755ebecf58db7f9a57215c4 (patch)
tree0ca587705b99d7caab12bdb3557874c8c41e8356 /activities/views/follows.py
parent45c6978bc397691b22db0360b16b19979eac7dce (diff)
downloadtakahe-fb2eea956ef7416eb755ebecf58db7f9a57215c4.tar.gz
takahe-fb2eea956ef7416eb755ebecf58db7f9a57215c4.tar.bz2
takahe-fb2eea956ef7416eb755ebecf58db7f9a57215c4.zip
Several pagination improvements (#170)
Home/Notification gets pagination, Follows becomes ListView
Diffstat (limited to 'activities/views/follows.py')
-rw-r--r--activities/views/follows.py46
1 files changed, 26 insertions, 20 deletions
diff --git a/activities/views/follows.py b/activities/views/follows.py
index 44d8adc..6b0881a 100644
--- a/activities/views/follows.py
+++ b/activities/views/follows.py
@@ -1,33 +1,39 @@
+from django.db.models import Q
from django.utils.decorators import method_decorator
-from django.views.generic import TemplateView
+from django.views.generic import ListView
from users.decorators import identity_required
-from users.models import FollowStates
+from users.models import Follow, FollowStates
@method_decorator(identity_required, name="dispatch")
-class FollowsPage(TemplateView):
+class Follows(ListView):
"""
Shows followers/follows.
"""
template_name = "activities/follows.html"
+ extra_context = {
+ "section": "follows",
+ }
+ paginate_by = 50
- def get_context_data(self):
- # Gather all identities with a following relationship with us
- identities = {}
- for outbound_follow in self.request.identity.outbound_follows.filter(
- state__in=FollowStates.group_active()
- ):
- identities.setdefault(outbound_follow.target, {})[
- "outbound"
- ] = outbound_follow
- for inbound_follow in self.request.identity.inbound_follows.filter(
- state__in=FollowStates.group_active()
- ):
- identities.setdefault(inbound_follow.source, {})["inbound"] = inbound_follow
+ def get_queryset(self):
+ return Follow.objects.filter(
+ Q(source=self.request.identity) | Q(target=self.request.identity),
+ state__in=FollowStates.group_active(),
+ ).order_by("-created")
- return {
- "section": "follows",
- "identities": sorted(identities.items(), key=lambda i: i[0].username),
- }
+ def get_context_data(self):
+ context = super().get_context_data()
+ identities = []
+ for follow in context["page_obj"].object_list:
+ if follow.source == self.request.identity:
+ identity = follow.target
+ follow_type = "outbound"
+ else:
+ identity = follow.source
+ follow_type = "inbound"
+ identities.append((identity, follow_type))
+ context["page_obj"].object_list = identities
+ return context