Correct calls to annotated user set

This commit is contained in:
Mouse Reeve
2021-04-23 16:34:04 -07:00
parent 03e5da12dd
commit dda21195de
3 changed files with 26 additions and 15 deletions

View File

@ -207,27 +207,27 @@ def get_suggested_users(user):
)
def get_annotated_users(user, *args, **kwargs):
def get_annotated_users(viewer, *args, **kwargs):
""" Users, annotated with things they have in common """
return (
models.User.objects.filter(discoverable=True, is_active=True, *args, **kwargs)
.exclude(Q(id__in=user.blocks.all()) | Q(blocks=user))
.exclude(Q(id__in=viewer.blocks.all()) | Q(blocks=viewer))
.annotate(
mutuals=Count(
"following",
filter=Q(
~Q(id=user.id),
~Q(id__in=user.following.all()),
following__in=user.following.all(),
~Q(id=viewer.id),
~Q(id__in=viewer.following.all()),
following__in=viewer.following.all(),
),
distinct=True,
),
shared_books=Count(
"shelfbook",
filter=Q(
~Q(id=user.id),
~Q(id=viewer.id),
shelfbook__book__parent_work__in=[
s.book.parent_work for s in user.shelfbook_set.all()
s.book.parent_work for s in viewer.shelfbook_set.all()
],
),
distinct=True,