Skip to content

Commit 3b3347c

Browse files
committed
feat(quiz): added shared statistics models
1 parent c9f372c commit 3b3347c

10 files changed

Lines changed: 122 additions & 56 deletions
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# Generated by Django 4.0.6 on 2022-07-16 07:08
2+
3+
from django.db import migrations
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('shared_models', '0001_initial'),
10+
]
11+
12+
operations = [
13+
migrations.RemoveField(
14+
model_name='tag',
15+
name='question',
16+
),
17+
migrations.DeleteModel(
18+
name='Answer',
19+
),
20+
migrations.DeleteModel(
21+
name='Question',
22+
),
23+
migrations.DeleteModel(
24+
name='Tag',
25+
),
26+
]
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
# Generated by Django 4.0.6 on 2022-07-16 07:15
2+
3+
import datetime
4+
from django.db import migrations, models
5+
import django.db.models.deletion
6+
7+
8+
class Migration(migrations.Migration):
9+
10+
initial = True
11+
12+
dependencies = [
13+
('shared_models', '0002_remove_tag_question_delete_answer_delete_question_and_more'),
14+
]
15+
16+
operations = [
17+
migrations.CreateModel(
18+
name='Answer',
19+
fields=[
20+
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
21+
('text', models.CharField(max_length=200)),
22+
('is_correct', models.BooleanField(default=False)),
23+
],
24+
),
25+
migrations.CreateModel(
26+
name='Question',
27+
fields=[
28+
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
29+
('text', models.TextField(blank=True, default='')),
30+
('question_type', models.CharField(choices=[('MC', 'Multiple Choice'), ('NA', 'Numerical Answer'), ('SA', 'Short Answer')], default='MC', max_length=2)),
31+
('date_created', models.DateTimeField(auto_now_add=True, null=True)),
32+
],
33+
),
34+
migrations.CreateModel(
35+
name='Tag',
36+
fields=[
37+
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
38+
('name', models.CharField(max_length=100)),
39+
('question', models.ManyToManyField(to='shared_models.question')),
40+
],
41+
),
42+
migrations.CreateModel(
43+
name='QuestionResponse',
44+
fields=[
45+
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
46+
('is_correct', models.BooleanField(default=False)),
47+
('time_taken', models.DurationField(default=datetime.timedelta(0))),
48+
('date_created', models.DateTimeField(auto_now_add=True, null=True)),
49+
('question', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='shared_models.question')),
50+
('selected_answer', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='shared_models.answer')),
51+
],
52+
),
53+
migrations.AddField(
54+
model_name='answer',
55+
name='question',
56+
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='shared_models.question'),
57+
),
58+
]
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
from .quiz_models import Question, Tag, Answer
2+
from .statistics_models import QuestionResponse
File renamed without changes.

server/api/apps/shared_models/models.py renamed to server/api/apps/shared_models/models/quiz_models.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ class Question(models.Model):
77
class QuestionType(models.TextChoices):
88
MULTICHOICE = "MC", _("Multiple Choice")
99
NUMERIC = "NA", _("Numerical Answer")
10+
SHORT_ANSWER = "SA", _("Short Answer")
1011

1112

1213
text = models.TextField(blank=True, default="")
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
from django.db import models
2+
from . import defines
3+
from .quiz_models import *
4+
5+
from datetime import timedelta
6+
7+
8+
class QuestionResponse(models.Model):
9+
# TODO later: add in a field for the user who submitted the response
10+
question = models.ForeignKey(Question, on_delete=models.CASCADE)
11+
selected_answer = models.ForeignKey(Answer,
12+
on_delete=models.CASCADE,
13+
null=True)
14+
is_correct = models.BooleanField(default=False)
15+
time_taken = models.DurationField(default=timedelta())
16+
date_created = models.DateTimeField(auto_now_add=True, null=True)
17+
18+
def __str__(self):
19+
return str((self.question, self.selected_answer))
20+

server/api/apps/shared_models/serializers.py renamed to server/api/apps/shared_models/quiz_serializers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from rest_framework import routers, serializers, viewsets
2-
from .models import *
2+
from models.quiz_models import *
33

44

55
class QuestionSerializer(serializers.HyperlinkedModelSerializer):
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
from rest_framework import routers, serializers, viewsets
2+
from models.statistics_models import *
3+
4+
5+
class QuestionResponseSerializer(serializers.HyperlinkedModelSerializer):
6+
class Meta:
7+
model = QuestionResponse
8+
fields = ["id",
9+
"question",
10+
"selected_answer",
11+
"is_correct",
12+
"time_taken",
13+
"date_created"]
14+

server/api/apps/shared_models/urls.py

Lines changed: 0 additions & 11 deletions
This file was deleted.

server/api/apps/shared_models/views.py

Lines changed: 0 additions & 44 deletions
This file was deleted.

0 commit comments

Comments
 (0)