diff --git a/__pycache__/seed_data.cpython-311.pyc b/__pycache__/seed_data.cpython-311.pyc new file mode 100644 index 0000000..6bd7068 Binary files /dev/null and b/__pycache__/seed_data.cpython-311.pyc differ diff --git a/config/__pycache__/__init__.cpython-311.pyc b/config/__pycache__/__init__.cpython-311.pyc index 423a636..6e7673c 100644 Binary files a/config/__pycache__/__init__.cpython-311.pyc and b/config/__pycache__/__init__.cpython-311.pyc differ diff --git a/config/__pycache__/settings.cpython-311.pyc b/config/__pycache__/settings.cpython-311.pyc index 96bce55..82d3a66 100644 Binary files a/config/__pycache__/settings.cpython-311.pyc and b/config/__pycache__/settings.cpython-311.pyc differ diff --git a/config/__pycache__/urls.cpython-311.pyc b/config/__pycache__/urls.cpython-311.pyc index 0b85e94..7a26413 100644 Binary files a/config/__pycache__/urls.cpython-311.pyc and b/config/__pycache__/urls.cpython-311.pyc differ diff --git a/config/__pycache__/wsgi.cpython-311.pyc b/config/__pycache__/wsgi.cpython-311.pyc index 9c49e09..d32e301 100644 Binary files a/config/__pycache__/wsgi.cpython-311.pyc and b/config/__pycache__/wsgi.cpython-311.pyc differ diff --git a/core/__pycache__/__init__.cpython-311.pyc b/core/__pycache__/__init__.cpython-311.pyc index 74b1112..834ea89 100644 Binary files a/core/__pycache__/__init__.cpython-311.pyc and b/core/__pycache__/__init__.cpython-311.pyc differ diff --git a/core/__pycache__/admin.cpython-311.pyc b/core/__pycache__/admin.cpython-311.pyc index a5ed392..863d1c7 100644 Binary files a/core/__pycache__/admin.cpython-311.pyc and b/core/__pycache__/admin.cpython-311.pyc differ diff --git a/core/__pycache__/apps.cpython-311.pyc b/core/__pycache__/apps.cpython-311.pyc index 6f131d4..82edc20 100644 Binary files a/core/__pycache__/apps.cpython-311.pyc and b/core/__pycache__/apps.cpython-311.pyc differ diff --git a/core/__pycache__/context_processors.cpython-311.pyc b/core/__pycache__/context_processors.cpython-311.pyc index 75bf223..3b7e6d4 100644 Binary files a/core/__pycache__/context_processors.cpython-311.pyc and b/core/__pycache__/context_processors.cpython-311.pyc differ diff --git a/core/__pycache__/models.cpython-311.pyc b/core/__pycache__/models.cpython-311.pyc index e061640..93b9855 100644 Binary files a/core/__pycache__/models.cpython-311.pyc and b/core/__pycache__/models.cpython-311.pyc differ diff --git a/core/__pycache__/urls.cpython-311.pyc b/core/__pycache__/urls.cpython-311.pyc index 5a69659..668fb67 100644 Binary files a/core/__pycache__/urls.cpython-311.pyc and b/core/__pycache__/urls.cpython-311.pyc differ diff --git a/core/__pycache__/views.cpython-311.pyc b/core/__pycache__/views.cpython-311.pyc index 2a36fd6..a6e696f 100644 Binary files a/core/__pycache__/views.cpython-311.pyc and b/core/__pycache__/views.cpython-311.pyc differ diff --git a/core/admin.py b/core/admin.py index 8c38f3f..61d0fb0 100644 --- a/core/admin.py +++ b/core/admin.py @@ -1,3 +1,22 @@ from django.contrib import admin +from .models import Level, Question, Option, Score -# Register your models here. +class OptionInline(admin.TabularInline): + model = Option + extra = 4 + +class QuestionAdmin(admin.ModelAdmin): + inlines = [OptionInline] + list_display = ('text', 'level', 'points', 'time_limit') + list_filter = ('level',) + +class LevelAdmin(admin.ModelAdmin): + list_display = ('title', 'order') + +class ScoreAdmin(admin.ModelAdmin): + list_display = ('player_name', 'score', 'level', 'date_played') + list_filter = ('level', 'date_played') + +admin.site.register(Level, LevelAdmin) +admin.site.register(Question, QuestionAdmin) +admin.site.register(Score, ScoreAdmin) \ No newline at end of file diff --git a/core/migrations/0001_initial.py b/core/migrations/0001_initial.py new file mode 100644 index 0000000..8e06875 --- /dev/null +++ b/core/migrations/0001_initial.py @@ -0,0 +1,72 @@ +# Generated by Django 5.2.7 on 2026-02-20 16:10 + +import django.db.models.deletion +import django.utils.timezone +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Level', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=200, verbose_name='Մակարդակ')), + ('description', models.TextField(blank=True, verbose_name='Նկարագրություն')), + ('order', models.IntegerField(default=0, verbose_name='Հերթականություն')), + ], + options={ + 'verbose_name': 'Մակարդակ', + 'verbose_name_plural': 'Մակարդակներ', + 'ordering': ['order'], + }, + ), + migrations.CreateModel( + name='Question', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('text', models.TextField(verbose_name='Հարց')), + ('points', models.IntegerField(default=10, verbose_name='Միավորներ')), + ('time_limit', models.IntegerField(default=30, verbose_name='Ժամանակ (վայրկյան)')), + ('level', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='questions', to='core.level', verbose_name='Մակարդակ')), + ], + options={ + 'verbose_name': 'Հարց', + 'verbose_name_plural': 'Հարցեր', + }, + ), + migrations.CreateModel( + name='Option', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('text', models.CharField(max_length=500, verbose_name='Տարբերակ')), + ('is_correct', models.BooleanField(default=False, verbose_name='Ճիշտ է')), + ('question', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='options', to='core.question', verbose_name='Հարց')), + ], + options={ + 'verbose_name': 'Տարբերակ', + 'verbose_name_plural': 'Տարբերակներ', + }, + ), + migrations.CreateModel( + name='Score', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('player_name', models.CharField(max_length=100, verbose_name='Խաղացող')), + ('score', models.IntegerField(verbose_name='Միավոր')), + ('date_played', models.DateTimeField(default=django.utils.timezone.now, verbose_name='Ամսաթիվ')), + ('level', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.level', verbose_name='Մակարդակ')), + ], + options={ + 'verbose_name': 'Արդյունք', + 'verbose_name_plural': 'Արդյունքներ', + 'ordering': ['-score', '-date_played'], + }, + ), + ] diff --git a/core/migrations/__pycache__/0001_initial.cpython-311.pyc b/core/migrations/__pycache__/0001_initial.cpython-311.pyc new file mode 100644 index 0000000..99f00c5 Binary files /dev/null and b/core/migrations/__pycache__/0001_initial.cpython-311.pyc differ diff --git a/core/migrations/__pycache__/__init__.cpython-311.pyc b/core/migrations/__pycache__/__init__.cpython-311.pyc index 9c833c8..cd7d6ba 100644 Binary files a/core/migrations/__pycache__/__init__.cpython-311.pyc and b/core/migrations/__pycache__/__init__.cpython-311.pyc differ diff --git a/core/models.py b/core/models.py index 71a8362..5397e20 100644 --- a/core/models.py +++ b/core/models.py @@ -1,3 +1,54 @@ from django.db import models +from django.utils import timezone -# Create your models here. +class Level(models.Model): + title = models.CharField(max_length=200, verbose_name="Մակարդակ") + description = models.TextField(blank=True, verbose_name="Նկարագրություն") + order = models.IntegerField(default=0, verbose_name="Հերթականություն") + + def __str__(self): + return self.title + + class Meta: + verbose_name = "Մակարդակ" + verbose_name_plural = "Մակարդակներ" + ordering = ['order'] + +class Question(models.Model): + level = models.ForeignKey(Level, on_delete=models.CASCADE, related_name="questions", verbose_name="Մակարդակ") + text = models.TextField(verbose_name="Հարց") + points = models.IntegerField(default=10, verbose_name="Միավորներ") + time_limit = models.IntegerField(default=30, verbose_name="Ժամանակ (վայրկյան)") + + def __str__(self): + return self.text[:50] + + class Meta: + verbose_name = "Հարց" + verbose_name_plural = "Հարցեր" + +class Option(models.Model): + question = models.ForeignKey(Question, on_delete=models.CASCADE, related_name="options", verbose_name="Հարց") + text = models.CharField(max_length=500, verbose_name="Տարբերակ") + is_correct = models.BooleanField(default=False, verbose_name="Ճիշտ է") + + def __str__(self): + return self.text + + class Meta: + verbose_name = "Տարբերակ" + verbose_name_plural = "Տարբերակներ" + +class Score(models.Model): + player_name = models.CharField(max_length=100, verbose_name="Խաղացող") + score = models.IntegerField(verbose_name="Միավոր") + level = models.ForeignKey(Level, on_delete=models.CASCADE, verbose_name="Մակարդակ") + date_played = models.DateTimeField(default=timezone.now, verbose_name="Ամսաթիվ") + + def __str__(self): + return f"{self.player_name} - {self.score}" + + class Meta: + verbose_name = "Արդյունք" + verbose_name_plural = "Արդյունքներ" + ordering = ['-score', '-date_played'] \ No newline at end of file diff --git a/core/templates/base.html b/core/templates/base.html index 1e7e5fb..43761b0 100644 --- a/core/templates/base.html +++ b/core/templates/base.html @@ -1,25 +1,122 @@ +{% load static %} - - +
- -