From c0c155fc94cd6f62ac5dc113cd5af1c144573e8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20P=C3=A9pin?= Date: Thu, 9 Jan 2020 17:08:29 +0100 Subject: [PATCH] Propositions: move all queries into views.py --- propositions/templates/propositions/liste.html | 10 +++++++--- propositions/templates/propositions/reponse.html | 1 - propositions/templatetags/__init__.py | 0 propositions/templatetags/getresponse.py | 13 ------------- propositions/views.py | 9 ++++++++- 5 files changed, 15 insertions(+), 18 deletions(-) delete mode 100644 propositions/templates/propositions/reponse.html delete mode 100644 propositions/templatetags/__init__.py delete mode 100644 propositions/templatetags/getresponse.py diff --git a/propositions/templates/propositions/liste.html b/propositions/templates/propositions/liste.html index 62b74eb..02e5ca1 100644 --- a/propositions/templates/propositions/liste.html +++ b/propositions/templates/propositions/liste.html @@ -1,5 +1,4 @@ {% extends "gestion/base.html" %} -{% load getresponse %} {% block titre %}Propositions de morceau{% endblock %} @@ -17,6 +16,7 @@ + {% for p in propositions %} @@ -29,8 +29,12 @@ {{ p.nb_no }} Oui Non - {% getresponse request.user p %} - {% if p.user == request.user.profile or request.user.profile.is_chef %}Supprimer{% endif %} + {% if p.user_answer %}Vous avez voté {{ p.user_answer }}{% endif %} + + {% if p.user == request.user or request.user.profile.is_chef %} + Supprimer + {% endif %} + {% endfor %} diff --git a/propositions/templates/propositions/reponse.html b/propositions/templates/propositions/reponse.html deleted file mode 100644 index e5ee7f3..0000000 --- a/propositions/templates/propositions/reponse.html +++ /dev/null @@ -1 +0,0 @@ -{% if reponse %}Vous avez voté {{ reponse }}{%endif%} diff --git a/propositions/templatetags/__init__.py b/propositions/templatetags/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/propositions/templatetags/getresponse.py b/propositions/templatetags/getresponse.py deleted file mode 100644 index 612e2d4..0000000 --- a/propositions/templatetags/getresponse.py +++ /dev/null @@ -1,13 +0,0 @@ -from django import template -from propositions.models import Answer - -register = template.Library() - - -@register.inclusion_tag("propositions/reponse.html") -def getresponse(user, prop): - try: - answer = Answer.objects.values_list("answer").get(proposition=prop, user=user) - return {"reponse": answer[0]} - except Answer.DoesNotExist: - return {} diff --git a/propositions/views.py b/propositions/views.py index 6947afb..d7f39e1 100644 --- a/propositions/views.py +++ b/propositions/views.py @@ -2,7 +2,7 @@ from django.shortcuts import redirect, get_object_or_404 from django.urls import reverse_lazy from django.contrib.auth.decorators import login_required from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin -from django.db.models import Count, Q +from django.db.models import Count, OuterRef, Q, Subquery from django.views.generic import CreateView, DeleteView, ListView from django.http import HttpResponseRedirect @@ -28,10 +28,17 @@ class PropositionList(LoginRequiredMixin, ListView): model = Proposition def get_queryset(self): + user = self.request.user + user_answers = ( + Answer.objects + .filter(proposition=OuterRef("id"), user=user) + .values_list("answer", flat=True) + ) return ( Proposition.objects .annotate(nb_yes=Count("answer", filter=Q(answer__answer=Answer.YES))) .annotate(nb_no=Count("answer", filter=Q(answer__answer=Answer.NO))) + .annotate(user_answer=Subquery(user_answers[:1])) .order_by("-nb_yes", "nb_no", "name") )