def get_context_data(self, **kwargs):
history = self.page_user.content_set.public().prefetch_related(
"author__reputation", "items")
fwers_ids = Follow.objects.get_follows(
self.page_user).values_list("user_id", flat=True)
obj_fwed = Follow.objects.filter(user=self.page_user)
fwees_ids = obj_fwed.values_list("target_user_id", flat=True)
items_fwed_ids = obj_fwed.values_list("target_item_id", flat=True)
empty_msg = _("%(page_user_display)s have not contributed yet.") % {
"page_user_display": user_display(self.page_user)
}
context = super(ProfileDetailView, self).get_context_data(**kwargs)
followers = User.objects.filter(pk__in=fwers_ids)
followees = User.objects.filter(pk__in=fwees_ids)
scores, votes = history.get_scores_and_votes(self.request.user, True)
context.update({
"empty_msg": empty_msg,
"reputation": self.page_user.reputation,
"fwers": followers.order_by("-reputation__reputation_incremented"),
"fwees": followees.order_by("-reputation__reputation_incremented"),
"items_fwed": Item.objects.filter(pk__in=items_fwed_ids),
"scores": scores,
"votes": votes,
})
# Next step would be to be able to "merge" the get_context_data of both
# DetailView (SingleObjectMixin) and MultipleObjectMixin
m = MultipleObjectMixin()
m.request = self.request
m.kwargs = self.kwargs
m.paginate_by = self.paginate_by
history = history.select_subclasses()
context.update(m.get_context_data(object_list=history))
return context