Skip to content

Commit

Permalink
Merge pull request #53 from codersforcauses/issue-36-Create_a_Quiz_re…
Browse files Browse the repository at this point in the history
…lating_models

Issue 36 create a quiz relating models
  • Loading branch information
yunho7687 authored Jan 11, 2025
2 parents 8c316f0 + 3e448a7 commit 3995b9f
Show file tree
Hide file tree
Showing 13 changed files with 527 additions and 0 deletions.
133 changes: 133 additions & 0 deletions server/api/question/migrations/0001_initial.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
# Generated by Django 5.1 on 2025-01-11 05:35

import django.db.models.deletion
import django.utils.timezone
from django.conf import settings
from django.db import migrations, models


class Migration(migrations.Migration):

initial = True

dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]

operations = [
migrations.CreateModel(
name="Image",
fields=[
("id", models.AutoField(primary_key=True, serialize=False)),
("scale", models.IntegerField()),
("jax_text", models.TextField(default="")),
("url", models.CharField(max_length=255)),
],
),
migrations.CreateModel(
name="Category",
fields=[
("id", models.AutoField(primary_key=True, serialize=False)),
("diff_level", models.IntegerField()),
("name", models.CharField(max_length=50)),
("info", models.TextField(default="")),
("is_comp", models.BooleanField()),
(
"parent",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
to="question.category",
),
),
],
),
migrations.CreateModel(
name="Question",
fields=[
("id", models.AutoField(primary_key=True, serialize=False)),
("name", models.CharField(max_length=255)),
("question_text", models.TextField(default="")),
("description", models.TextField(default="")),
("layout", models.TextField(default="")),
("default_mark", models.IntegerField(default=0)),
(
"time_created",
models.DateTimeField(default=django.utils.timezone.now),
),
("time_modified", models.DateTimeField(blank=True, null=True)),
(
"category_id",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
to="question.category",
),
),
(
"created_by",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="questions_created",
to=settings.AUTH_USER_MODEL,
),
),
(
"image",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
to="question.image",
),
),
(
"modified_by",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="questions_modified",
to=settings.AUTH_USER_MODEL,
),
),
(
"parent",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
to="question.question",
),
),
],
),
migrations.CreateModel(
name="Answer",
fields=[
("id", models.AutoField(primary_key=True, serialize=False)),
("answer", models.CharField(max_length=100)),
("feedback", models.TextField(default="")),
(
"image",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
to="question.image",
),
),
(
"question",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
to="question.question",
),
),
],
),
]
Empty file added server/api/quiz/__init__.py
Empty file.
27 changes: 27 additions & 0 deletions server/api/quiz/admin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
from django.contrib import admin

# Register your models here.
from .models import QuizAttempt, QuizAttemptUser, Quiz, QuizSlot


class QuizAdmin(admin.ModelAdmin):
list_display = ("name",)


class QuizSlotsAdmin(admin.ModelAdmin):
list_display = ("id", "quiz_id", "status")


class QuizAttemptAdmin(admin.ModelAdmin):
list_display = ("id", "quiz_id", "attempt")


class QuizAttemptUserAdmin(admin.ModelAdmin):
list_display = ("id", "quiz_attempt", "student_id")


admin.site.register(Quiz, QuizAdmin)
admin.site.register(QuizSlot, QuizSlotsAdmin)

admin.site.register(QuizAttempt, QuizAttemptAdmin)
admin.site.register(QuizAttemptUser, QuizAttemptUserAdmin)
6 changes: 6 additions & 0 deletions server/api/quiz/apps.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
from django.apps import AppConfig


class QuizConfig(AppConfig):
default_auto_field = "django.db.models.BigAutoField"
name = "api.quiz"
102 changes: 102 additions & 0 deletions server/api/quiz/migrations/0001_initial.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
# Generated by Django 5.1 on 2025-01-04 07:03

import django.db.models.deletion
from django.db import migrations, models


class Migration(migrations.Migration):

initial = True

dependencies = []

operations = [
migrations.CreateModel(
name="Quiz",
fields=[
("id", models.AutoField(primary_key=True, serialize=False)),
("name", models.CharField(max_length=255)),
("intro", models.TextField()),
("grade", models.DecimalField(decimal_places=2, max_digits=5)),
("is_comp", models.BooleanField(default=False)),
("visible", models.BooleanField(default=False)),
("open_time_date", models.DateTimeField()),
("close_time_date", models.DateTimeField()),
("timelimit", models.IntegerField()),
],
),
migrations.CreateModel(
name="QuizAttempt",
fields=[
("id", models.AutoField(primary_key=True, serialize=False)),
("attempt", models.IntegerField()),
("question_attempts", models.IntegerField()),
("current_page", models.IntegerField()),
("state", models.CharField(max_length=10)),
("time_start", models.DateTimeField(auto_now_add=True)),
("time_finish", models.DateTimeField(auto_now_add=True)),
("time_modified", models.DateTimeField(auto_now=True)),
("time_modified_offline", models.DateTimeField(auto_now=True)),
("sum_grades", models.DecimalField(decimal_places=5, max_digits=10)),
],
),
migrations.CreateModel(
name="QuizAttemptUser",
fields=[
("id", models.AutoField(primary_key=True, serialize=False)),
(
"grade",
models.DecimalField(decimal_places=5, default=0, max_digits=10),
),
("time_modified", models.DateTimeField(auto_now=True)),
(
"quiz_attempt",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="quiz_attempts",
to="quiz.quizattempt",
),
),
(
"student",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="student_attempts",
to="quiz.quizattempt",
),
),
],
),
migrations.CreateModel(
name="QuizSlots",
fields=[
("id", models.AutoField(primary_key=True, serialize=False)),
("slot", models.IntegerField()),
(
"status",
models.CharField(
choices=[
("processing", "Processing"),
("submitted", "Submitted"),
]
),
),
("display_number", models.CharField()),
("require_previous", models.BooleanField(default=False)),
("block", models.IntegerField()),
(
"quiz_id",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE, to="quiz.quiz"
),
),
],
),
migrations.AddField(
model_name="quizattempt",
name="quiz_id",
field=models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE, to="quiz.quizslots"
),
),
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# Generated by Django 5.1 on 2025-01-11 05:35

import django.db.models.deletion
from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
("question", "0001_initial"),
("quiz", "0001_initial"),
("users", "0002_alter_school_name"),
]

operations = [
migrations.RemoveField(
model_name="quizattemptuser",
name="student",
),
migrations.AddField(
model_name="quizattemptuser",
name="student_id",
field=models.ForeignKey(
default=None,
on_delete=django.db.models.deletion.CASCADE,
related_name="student_id",
to="users.student",
),
),
migrations.AddField(
model_name="quizslots",
name="question_id",
field=models.ForeignKey(
default=1,
on_delete=django.db.models.deletion.CASCADE,
to="question.question",
),
preserve_default=False,
),
migrations.AlterField(
model_name="quizattempt",
name="state",
field=models.CharField(
choices=[
("STATE_UNATTEMPTED", "Unattempted"),
("STATE_IN_PROGRESS", "In Progress"),
("STATE_COMPLETED", "Completed"),
]
),
),
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
# Generated by Django 5.1 on 2025-01-11 05:39

import django.db.models.deletion
from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
("question", "0001_initial"),
("quiz", "0002_remove_quizattemptuser_student_and_more"),
]

operations = [
migrations.CreateModel(
name="QuizSlot",
fields=[
("id", models.AutoField(primary_key=True, serialize=False)),
("slot", models.IntegerField()),
(
"status",
models.CharField(
choices=[
("processing", "Processing"),
("submitted", "Submitted"),
]
),
),
("display_number", models.CharField()),
("require_previous", models.BooleanField(default=False)),
("block", models.IntegerField()),
(
"question_id",
models.ForeignKey(
default=None,
on_delete=django.db.models.deletion.CASCADE,
to="question.question",
),
),
(
"quiz_id",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE, to="quiz.quiz"
),
),
],
),
migrations.AlterField(
model_name="quizattempt",
name="quiz_id",
field=models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE, to="quiz.quizslot"
),
),
migrations.DeleteModel(
name="QuizSlots",
),
]
Loading

0 comments on commit 3995b9f

Please sign in to comment.