fix/one-user-one-test-opinion #40
@ -36,9 +36,14 @@
|
||||
<option value="4">Dobry</option>
|
||||
<option value="5">Genialny</option>
|
||||
</select>
|
||||
|
||||
<span><button class="defaultButton">
|
||||
<a href='' onclick="this.href='rateTest?rate='+document.getElementById('rate').value">Oceń</a>
|
||||
</button></span>
|
||||
{% if request.GET.message != "" %}
|
||||
<br>
|
||||
{{ request.GET.message }}
|
||||
{% endif %}
|
||||
<div class="resultContainerSapce"><br></div>
|
||||
|
||||
{% if request.session.password == "" %}
|
||||
|
@ -37,8 +37,12 @@
|
||||
<option value="5">Genialny</option>
|
||||
</select>
|
||||
<span><button class="defaultButton">
|
||||
<a href='' onclick="this.href='rateTest?rate='+document.getElementById('rate').value">Oceń</a>
|
||||
<a href='' onclick="this.href='rateTournament?rate='+document.getElementById('rate').value">Oceń</a>
|
||||
</button></span>
|
||||
{% if request.GET.message != "" %}
|
||||
<br>
|
||||
{{ request.GET.message }}
|
||||
{% endif %}
|
||||
<div class="resultContainerSapce"><br></div>
|
||||
|
||||
{% if request.session.password == "" %}
|
||||
|
32
trials/migrations/0028_ratetest_ratetournament.py
Normal file
32
trials/migrations/0028_ratetest_ratetournament.py
Normal file
@ -0,0 +1,32 @@
|
||||
# Generated by Django 3.2.9 on 2022-06-04 09:39
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('trials', '0027_auto_20220524_2354'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='RateTournament',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('tournament', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='rate_tournaments', to='trials.tournament')),
|
||||
('user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='rate_tournaments', to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='RateTest',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('test', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='rate_tests', to='trials.test')),
|
||||
('user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='rate_tests', to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
),
|
||||
]
|
@ -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
|
||||
)
|
@ -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)
|
||||
|
||||
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
|
||||
|
Loading…
Reference in New Issue
Block a user