feature/post-test-answers #24
@ -3,14 +3,14 @@
|
||||
{% load rest_framework %}
|
||||
|
||||
|
||||
{% block title %}New Test{% endblock %}
|
||||
{% block title %}{{ request.GET.name }}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="newContainer">
|
||||
<form method="post">
|
||||
<h1>Add questions</h1>
|
||||
{% for i in number_of_questions|times %}
|
||||
<h2>Question {{i}}</h2>
|
||||
{% for i in request.GET.number_of_questions|times %}
|
||||
<h2>Question {{forloop.counter}}</h2>
|
||||
<label for="desc">Description: </label>
|
||||
<input id="desc" type="text" name="desc">
|
||||
<br>
|
||||
|
@ -1,8 +1,8 @@
|
||||
{% extends "base.html" %}
|
||||
{% load filters %}
|
||||
{% load rest_framework %}
|
||||
|
||||
{% block title %}New Test{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="newContainer">
|
||||
<form method="post">
|
||||
@ -27,15 +27,14 @@
|
||||
<br>
|
||||
<br>
|
||||
<label for="questions">Number of questions: </label>
|
||||
<input id="questions" type="number" name="questions" value="10">
|
||||
<input id="questions" type="number" name="questions" value="2">
|
||||
<br>
|
||||
<br>
|
||||
<label for="passing">Passing score: </label>
|
||||
<input id="passing" type="number" name="passing" value="5">
|
||||
<br>
|
||||
<br>
|
||||
<input type="submit" value="Add questions">
|
||||
<a href='' onclick="this.href='questions?passing='+document.getElementById('passing').value + '&name=' +document.getElementById('name').value + '&catgory='+document.getElementById('category').value+'&number_of_questions='+document.getElementById('questions').value">Dodaj pytania</a>
|
||||
</form>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
|
@ -2,5 +2,6 @@ from django import template
|
||||
register = template.Library()
|
||||
|
||||
@register.filter(name='times')
|
||||
def times(number):
|
||||
def times(number_str):
|
||||
number = int(number_str)
|
||||
return range(number)
|
@ -14,9 +14,7 @@ class TestManager(Manager):
|
||||
):
|
||||
Question = apps.get_model("questions", "Question")
|
||||
Answer = apps.get_model("answers", "Answer")
|
||||
category = Category.objects.get_or_create(
|
||||
name=category["name"]
|
||||
)
|
||||
category = category
|
||||
|
||||
instance = super().create(
|
||||
name=kwargs.get("name"),
|
||||
@ -31,8 +29,6 @@ class TestManager(Manager):
|
||||
test=instance
|
||||
)
|
||||
for answer in question["answers"]:
|
||||
# import pdb;
|
||||
# pdb.set_trace()
|
||||
Answer.objects.create(
|
||||
description=answer["description"],
|
||||
is_correct=answer["is_correct"],
|
||||
|
24
trials/migrations/0007_solvedtest.py
Normal file
24
trials/migrations/0007_solvedtest.py
Normal file
@ -0,0 +1,24 @@
|
||||
# Generated by Django 3.2.9 on 2022-01-22 18:28
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('trials', '0006_alter_test_category'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='SolvedTest',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('score', models.IntegerField(default=0)),
|
||||
('test', models.ManyToManyField(related_name='answers', to='trials.Test')),
|
||||
('user', models.ManyToManyField(related_name='answers', to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
),
|
||||
]
|
25
trials/migrations/0008_auto_20220122_1934.py
Normal file
25
trials/migrations/0008_auto_20220122_1934.py
Normal file
@ -0,0 +1,25 @@
|
||||
# Generated by Django 3.2.9 on 2022-01-22 18:34
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('trials', '0007_solvedtest'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='solvedtest',
|
||||
name='test',
|
||||
field=models.ManyToManyField(null=True, related_name='answers', to='trials.Test'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='solvedtest',
|
||||
name='user',
|
||||
field=models.ManyToManyField(null=True, related_name='answers', to=settings.AUTH_USER_MODEL),
|
||||
),
|
||||
]
|
34
trials/migrations/0009_auto_20220122_1942.py
Normal file
34
trials/migrations/0009_auto_20220122_1942.py
Normal file
@ -0,0 +1,34 @@
|
||||
# Generated by Django 3.2.9 on 2022-01-22 18:42
|
||||
|
||||
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', '0008_auto_20220122_1934'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='solvedtest',
|
||||
name='test',
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='solvedtest',
|
||||
name='test',
|
||||
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='answers', to='trials.test'),
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='solvedtest',
|
||||
name='user',
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='solvedtest',
|
||||
name='user',
|
||||
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='answers', to=settings.AUTH_USER_MODEL),
|
||||
),
|
||||
]
|
21
trials/migrations/0010_test_created_by.py
Normal file
21
trials/migrations/0010_test_created_by.py
Normal file
@ -0,0 +1,21 @@
|
||||
# Generated by Django 3.2.9 on 2022-01-22 18:57
|
||||
|
||||
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', '0009_auto_20220122_1942'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='test',
|
||||
name='created_by',
|
||||
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='tests', to=settings.AUTH_USER_MODEL),
|
||||
),
|
||||
]
|
@ -12,6 +12,12 @@ class Test(models.Model):
|
||||
# related_name="tests"
|
||||
# )
|
||||
category = models.CharField(max_length=100)
|
||||
created_by = models.ForeignKey(
|
||||
"users.User",
|
||||
null=True,
|
||||
related_name="tests",
|
||||
on_delete=models.CASCADE
|
||||
)
|
||||
|
||||
objects = TestManager()
|
||||
|
||||
@ -34,3 +40,25 @@ class Test(models.Model):
|
||||
if question.answers.get(id=answer["answer"]).is_correct:
|
||||
points += question.points
|
||||
return points
|
||||
|
||||
def name_and_passing_score(self):
|
||||
return {
|
||||
"name": self.name,
|
||||
"passing_score": self.passing_score
|
||||
}
|
||||
|
||||
|
||||
class SolvedTest(models.Model):
|
||||
score = models.IntegerField(default=0)
|
||||
user = models.ForeignKey(
|
||||
"users.User",
|
||||
null=True,
|
||||
related_name="answers",
|
||||
on_delete=models.CASCADE
|
||||
)
|
||||
test = models.ForeignKey(
|
||||
"Test",
|
||||
null=True,
|
||||
related_name="answers",
|
||||
on_delete=models.CASCADE
|
||||
)
|
@ -4,7 +4,7 @@ from rest_framework import views
|
||||
from rest_framework import viewsets
|
||||
from rest_framework.response import Response
|
||||
|
||||
from trials.models import Test
|
||||
from trials.models import Test, SolvedTest
|
||||
from trials.serializers import TestSerializer
|
||||
from django.conf import settings
|
||||
from django.shortcuts import render, redirect
|
||||
@ -17,28 +17,21 @@ import requests
|
||||
|
||||
|
||||
def addTest(request):
|
||||
if request.POST:
|
||||
data = request.POST
|
||||
return addQuestions(request="GET", data_about_test=data)
|
||||
return render(request, 'createTest.html')
|
||||
|
||||
|
||||
def addQuestions(request, data_about_test):
|
||||
number_of_question = 0
|
||||
if request == "GET":
|
||||
for key, value in data_about_test.items():
|
||||
if key == "questions":
|
||||
number_of_question = int(value)
|
||||
context = {
|
||||
"number_of_questions": number_of_question
|
||||
}
|
||||
template_name = "addQuestions.html"
|
||||
template = get_template(template_name)
|
||||
return HttpResponse(template.render(context))
|
||||
# return render(response, 'addQuestions.html')
|
||||
|
||||
def addQuestions(request, **kwargs):
|
||||
if request.POST:
|
||||
pass
|
||||
name = request.GET.get("name")
|
||||
passing = request.GET.get("passing")
|
||||
category = request.GET.get("category")
|
||||
number_of_questions = request.GET.get("number_of_questions")
|
||||
import pdb;pdb.set_trace()
|
||||
for question ,values in request.POST.iteritems():
|
||||
|
||||
|
||||
import pdb;pdb.set_trace()
|
||||
return render(request, 'addQuestions.html')
|
||||
|
||||
|
||||
|
||||
@ -52,11 +45,17 @@ def myTests(request):
|
||||
|
||||
|
||||
def solvedTests(request):
|
||||
# TODO implementation
|
||||
context = {}
|
||||
# context['tests']=Test.objects.filter(category=request.user)
|
||||
context['tests']=Test.objects.filter(category="Matematyka")
|
||||
#context['tests'] = Test.objects.all
|
||||
user_id = request.user.id
|
||||
solved_tests = SolvedTest.objects.filter(user__id=user_id)
|
||||
formatted_tests = list()
|
||||
for solved_test in solved_tests:
|
||||
formatted_tests.append({
|
||||
"name": solved_test.test.name_and_passing_score()["name"],
|
||||
"passing_score": solved_test.test.name_and_passing_score()["passing_score"],
|
||||
"score": solved_test.score
|
||||
})
|
||||
context['tests'] = formatted_tests
|
||||
return render(request, 'myTests.html', context)
|
||||
|
||||
|
||||
@ -164,6 +163,11 @@ class TestTemplateView(TemplateView):
|
||||
"status": self.PASSED.get(status, self.UNKNOWN),
|
||||
"points": score
|
||||
}
|
||||
SolvedTest.objects.create(
|
||||
score=score,
|
||||
user=request.user,
|
||||
test=test
|
||||
)
|
||||
template_name = "result.html"
|
||||
template = get_template(template_name)
|
||||
return HttpResponse(template.render(context))
|
||||
|
Loading…
Reference in New Issue
Block a user