from django.views.generic import ListView from django.contrib.contenttypes.models import ContentType from django.http import HttpResponse def upvote(request, content_type, object_id): ct = ContentType.objects.get_for_id(content_type) obj = ct.get_object_for_this_type(pk=object_id) obj.upvote(user=request.user) return HttpResponse({"success"}) def downvote(request, content_type, object_id): ct = ContentType.objects.get_for_id(content_type) obj = ct.get_object_for_this_type(pk=object_id) obj.downvote(user=request.user) return HttpResponse({"success"}) class UDList(ListView): """ Ads id upvoted by user """ def get_context_data(self, **kwargs): content_type = ContentType.objects.get_for_model(self.model) queryset = self.get_queryset() context = super().get_context_data(**kwargs) context["und_votes"] = { "upvoted": queryset.filter( und_votes__user=self.request.user, und_votes__content_type=content_type, und_votes__score=1 ).values_list("id", flat=True), "downvoted": queryset.filter( und_votes__user=self.request.user, und_votes__content_type=content_type, und_votes__score=-1 ).values_list("id", flat=True) } return context