From 544303c1458212f0db1a2f077cf185167751cae3 Mon Sep 17 00:00:00 2001 From: Hubert Jankowski Date: Sat, 4 Jun 2022 14:14:59 +0200 Subject: [PATCH] Fixed one user opinion to one test and tournament --- templates/result.html | 5 +++++ templates/tournament_result.html | 6 ++++- trials/models.py | 30 +++++++++++++++++++++++++ trials/views.py | 38 ++++++++++++++++++++++++++------ 4 files changed, 71 insertions(+), 8 deletions(-) diff --git a/templates/result.html b/templates/result.html index 80b072c..1abf9c3 100644 --- a/templates/result.html +++ b/templates/result.html @@ -36,9 +36,14 @@ + + {% if request.GET.message != "" %} +
+ {{ request.GET.message }} + {% endif %}

{% if request.session.password == "" %} diff --git a/templates/tournament_result.html b/templates/tournament_result.html index 80b072c..d4f6d9f 100644 --- a/templates/tournament_result.html +++ b/templates/tournament_result.html @@ -37,8 +37,12 @@ + {% if request.GET.message != "" %} +
+ {{ request.GET.message }} + {% endif %}

{% if request.session.password == "" %} diff --git a/trials/models.py b/trials/models.py index 5349b02..e5b213e 100644 --- a/trials/models.py +++ b/trials/models.py @@ -181,3 +181,33 @@ class Tournament(models.Model): "name": self.name, "passing_score": self.passing_score } + + +class RateTest(models.Model): + user = models.ForeignKey( + "users.User", + null=True, + related_name="rate_tests", + on_delete=models.CASCADE + ) + test = models.ForeignKey( + "Test", + null=True, + related_name="rate_tests", + on_delete=models.CASCADE + ) + + +class RateTournament(models.Model): + user = models.ForeignKey( + "users.User", + null=True, + related_name="rate_tournaments", + on_delete=models.CASCADE + ) + tournament = models.ForeignKey( + "Tournament", + null=True, + related_name="rate_tournaments", + on_delete=models.CASCADE + ) \ No newline at end of file diff --git a/trials/views.py b/trials/views.py index 6362535..8719421 100644 --- a/trials/views.py +++ b/trials/views.py @@ -8,7 +8,7 @@ from rest_framework.response import Response from rest_framework.views import APIView from questions.models import Question -from trials.models import Test, SolvedTest, Tournament +from trials.models import Test, SolvedTest, Tournament, RateTournament, RateTest from trials.serializers import TestSerializer from django.conf import settings from django.shortcuts import render, redirect @@ -324,18 +324,42 @@ def editPassword(request, test_id): test.save() return redirect(f'/tests/{test_id}/edit') + @login_required def rateTest(request, test_id): + user = request.user test = Test.objects.get(id=test_id) - rate = request.GET["rate"] - test.rates_amount += 1 - test.total_rating += int(rate) - avg_rating = test.total_rating / test.rates_amount - test.avg_rating = int(avg_rating) - test.save() + + if RateTest.objects.filter(user=user, test=test).exists(): + return redirect(f'/tests/{test_id}/result?message=Nie mozesz ocenić ponownie tego testu!') + else: + rate = request.GET["rate"] + test.rates_amount += 1 + test.total_rating += int(rate) + avg_rating = test.total_rating / test.rates_amount + test.avg_rating = int(avg_rating) + test.save() + RateTest.objects.create(user=user, test=test) return redirect(f'/tests/{test_id}/result') +@login_required +def rateTournament(request, tournament_id): + user = request.user + tournament = Test.objects.get(id=tournament_id) + if RateTournament.objects.filter(user=user, test=test).exists(): + redirect(f'/tests/{tournament_id}/tournament/result?message=Nie mozesz ocenić ponownie tego testu!') + else: + rate = request.GET["rate"] + tournament.rates_amount += 1 + tournament.total_rating += int(rate) + avg_rating = tournament.total_rating / tournament.rates_amount + tournament.avg_rating = int(avg_rating) + tournament.save() + RateTournament.objects.create(user=user, test=test) + return redirect(f'/tests/{tournament_id}/tournament/result') + + class TestModelViewSet(viewsets.ModelViewSet): queryset = Test.objects.all() serializer_class = TestSerializer