Skip to content

Commit aff4f37

Browse files
committed
Fix user vote display on account pages
1 parent 8a91f82 commit aff4f37

3 files changed

Lines changed: 24 additions & 14 deletions

File tree

democrasite/webiscite/models.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -153,11 +153,15 @@ def get_queryset(self):
153153
)
154154
)
155155

156-
def get_user_queryset(self, user: User):
157-
bills = self.get_queryset()
158-
return bills.annotate(
156+
def annotate_user_vote(
157+
self, user: User, queryset: models.QuerySet["Bill"] | None = None
158+
):
159+
if queryset is None:
160+
queryset = self.get_queryset()
161+
162+
return queryset.annotate(
159163
user_vote=models.Subquery(
160-
bills.filter(
164+
queryset.filter(
161165
vote__bill=models.OuterRef("pk"),
162166
vote__user=user,
163167
).values("vote__support")

democrasite/webiscite/tests/test_models.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -99,15 +99,15 @@ def test_get_queryset(self, bill, user: User):
9999
assert bill.yes_percent == 50 # noqa: PLR2004
100100
assert bill.no_percent == 50 # noqa: PLR2004
101101

102-
def test_get_user_queryset(self, bill: Bill, user: User):
102+
def test_annotate_user_vote(self, bill: Bill, user: User):
103103
bill.vote(user, support=True)
104-
assert Bill.objects.get_user_queryset(user).first().user_vote is True
104+
assert Bill.objects.annotate_user_vote(user).first().user_vote is True
105105

106106
bill.vote(user, support=False)
107-
assert Bill.objects.get_user_queryset(user).first().user_vote is False
107+
assert Bill.objects.annotate_user_vote(user).first().user_vote is False
108108

109109
bill.vote(user, support=False)
110-
assert Bill.objects.get_user_queryset(user).first().user_vote is None
110+
assert Bill.objects.annotate_user_vote(user).first().user_vote is None
111111

112112
def test_create_from_github(self, user: User):
113113
pr = PullRequestFactory.create()

democrasite/webiscite/views.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ class BillListView(ListView):
2424

2525
def get_queryset(self):
2626
if self.request.user.is_authenticated:
27-
return Bill.objects.get_user_queryset(self.request.user).filter(
27+
return Bill.objects.annotate_user_vote(self.request.user).filter(
2828
status=Bill.Status.OPEN
2929
)
3030
return Bill.objects.filter(status=Bill.Status.OPEN)
@@ -47,8 +47,11 @@ def get_queryset(self):
4747
"""
4848
Return the list of items for this view - bills proposed by the current user.
4949
"""
50-
assert self.request.user.is_authenticated # type guard
51-
return self.request.user.bill_set.all()
50+
user = self.request.user
51+
assert user.is_authenticated # type guard
52+
53+
bill_set = user.bill_set.all()
54+
return Bill.objects.annotate_user_vote(user, bill_set)
5255

5356
def get_context_data(self, **kwargs):
5457
context = super().get_context_data(**kwargs)
@@ -69,8 +72,11 @@ def get_queryset(self):
6972
"""
7073
Return the list of items for this view - bills voted on by the current user.
7174
"""
72-
assert self.request.user.is_authenticated # type guard
73-
return self.request.user.votes.all()
75+
user = self.request.user
76+
assert user.is_authenticated # type guard
77+
78+
bills = user.votes.all()
79+
return Bill.objects.annotate_user_vote(user, bills)
7480

7581
def get_context_data(self, **kwargs):
7682
context = super().get_context_data(**kwargs)
@@ -92,7 +98,7 @@ def get_object(self, queryset=None):
9298

9399
try:
94100
if self.request.user.is_authenticated:
95-
return Bill.objects.get_user_queryset(self.request.user).get(pk=pk)
101+
return Bill.objects.annotate_user_vote(self.request.user).get(pk=pk)
96102
return Bill.objects.get(pk=pk)
97103

98104
except Bill.DoesNotExist as err:

0 commit comments

Comments
 (0)