Using sqlite3

Using sqlite3 for quick setup and running without installing postgresql
This commit is contained in:
Adil Mohak 2024-08-31 14:58:01 +03:00
parent 7642618c45
commit c21814a282
50 changed files with 195 additions and 1321 deletions

View File

@ -1,12 +1,3 @@
# =============================
# Database config
DB_NAME=dj_lms
DB_USER=postgres
DB_PASSWORD=pass123
DB_HOST=localhost
DB_PORT=5432
# ============================= # =============================
# Email config # Email config

View File

@ -49,7 +49,6 @@ If you would like to contribute, simply begin by implementing one from the list
> The following programs are required to run the project > The following programs are required to run the project
- [Python3.8+](https://www.python.org/downloads/) - [Python3.8+](https://www.python.org/downloads/)
- [PostgreSQL database](https://www.postgresql.org/download/)
- [Redis](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/) - [Redis](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/)
# Installation # Installation

View File

@ -1,6 +1,6 @@
# Generated by Django 2.2.3 on 2020-07-29 15:25 # Generated by Django 4.0.8 on 2024-08-31 11:51
import django.contrib.auth.models import accounts.models
import django.contrib.auth.validators import django.contrib.auth.validators
from django.db import migrations, models from django.db import migrations, models
import django.utils.timezone import django.utils.timezone
@ -17,37 +17,64 @@ class Migration(migrations.Migration):
migrations.CreateModel( migrations.CreateModel(
name='User', name='User',
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('password', models.CharField(max_length=128, verbose_name='password')), ('password', models.CharField(max_length=128, verbose_name='password')),
('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')), ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')),
('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')), ('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')),
('username', models.CharField(error_messages={'unique': 'A user with that username already exists.'}, help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, unique=True, validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], verbose_name='username')), ('username', models.CharField(error_messages={'unique': 'A user with that username already exists.'}, help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, unique=True, validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], verbose_name='username')),
('first_name', models.CharField(blank=True, max_length=30, verbose_name='first name')), ('first_name', models.CharField(blank=True, max_length=150, verbose_name='first name')),
('last_name', models.CharField(blank=True, max_length=150, verbose_name='last name')), ('last_name', models.CharField(blank=True, max_length=150, verbose_name='last name')),
('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')), ('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')),
('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')), ('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')),
('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')), ('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')),
('is_student', models.BooleanField(default=False)), ('is_student', models.BooleanField(default=False)),
('is_lecturer', models.BooleanField(default=False)), ('is_lecturer', models.BooleanField(default=False)),
('is_parent', models.BooleanField(default=False)),
('is_dep_head', models.BooleanField(default=False)),
('gender', models.CharField(blank=True, choices=[('M', 'Male'), ('F', 'Female')], max_length=1, null=True)),
('phone', models.CharField(blank=True, max_length=60, null=True)), ('phone', models.CharField(blank=True, max_length=60, null=True)),
('address', models.CharField(blank=True, max_length=60, null=True)), ('address', models.CharField(blank=True, max_length=60, null=True)),
('picture', models.ImageField(default='default.png', null=True, upload_to='profile_pictures')), ('picture', models.ImageField(default='default.png', null=True, upload_to='profile_pictures/%y/%m/%d/')),
('email', models.EmailField(blank=True, max_length=254, null=True)), ('email', models.EmailField(blank=True, max_length=254, null=True)),
], ],
options={ options={
'verbose_name': 'user', 'ordering': ('-date_joined',),
'verbose_name_plural': 'users',
'abstract': False,
}, },
managers=[ managers=[
('objects', django.contrib.auth.models.UserManager()), ('objects', accounts.models.CustomUserManager()),
], ],
), ),
migrations.CreateModel(
name='DepartmentHead',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
],
options={
'ordering': ('-user__date_joined',),
},
),
migrations.CreateModel(
name='Parent',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('first_name', models.CharField(max_length=120)),
('last_name', models.CharField(max_length=120)),
('phone', models.CharField(blank=True, max_length=60, null=True)),
('email', models.EmailField(blank=True, max_length=254, null=True)),
('relation_ship', models.TextField(blank=True, choices=[('Father', 'Father'), ('Mother', 'Mother'), ('Brother', 'Brother'), ('Sister', 'Sister'), ('Grand mother', 'Grand mother'), ('Grand father', 'Grand father'), ('Other', 'Other')])),
],
options={
'ordering': ('-user__date_joined',),
},
),
migrations.CreateModel( migrations.CreateModel(
name='Student', name='Student',
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('level', models.CharField(choices=[('Level course', 'Level course'), ('Bachloar', 'Bachloar'), ('Master', 'Master')], max_length=25, null=True)), ('level', models.CharField(choices=[('Bachelor', 'Bachelor Degree'), ('Master', 'Master Degree')], max_length=25, null=True)),
], ],
options={
'ordering': ('-student__date_joined',),
},
), ),
] ]

View File

@ -1,4 +1,4 @@
# Generated by Django 2.2.3 on 2020-07-29 15:25 # Generated by Django 4.0.8 on 2024-08-31 11:51
from django.conf import settings from django.conf import settings
from django.db import migrations, models from django.db import migrations, models
@ -11,29 +11,49 @@ class Migration(migrations.Migration):
dependencies = [ dependencies = [
('accounts', '0001_initial'), ('accounts', '0001_initial'),
('auth', '0011_update_proxy_permissions'), ('auth', '0012_alter_user_first_name_max_length'),
('course', '0001_initial'), ('course', '0001_initial'),
] ]
operations = [ operations = [
migrations.AddField( migrations.AddField(
model_name='student', model_name='student',
name='department', name='program',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='course.Program'), field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='course.program'),
), ),
migrations.AddField( migrations.AddField(
model_name='student', model_name='student',
name='student', name='student',
field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
), ),
migrations.AddField(
model_name='parent',
name='student',
field=models.OneToOneField(null=True, on_delete=django.db.models.deletion.SET_NULL, to='accounts.student'),
),
migrations.AddField(
model_name='parent',
name='user',
field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
),
migrations.AddField(
model_name='departmenthead',
name='department',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='course.program'),
),
migrations.AddField(
model_name='departmenthead',
name='user',
field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
),
migrations.AddField( migrations.AddField(
model_name='user', model_name='user',
name='groups', name='groups',
field=models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.Group', verbose_name='groups'), field=models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.group', verbose_name='groups'),
), ),
migrations.AddField( migrations.AddField(
model_name='user', model_name='user',
name='user_permissions', name='user_permissions',
field=models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.Permission', verbose_name='user permissions'), field=models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.permission', verbose_name='user permissions'),
), ),
] ]

View File

@ -1,18 +0,0 @@
# Generated by Django 2.2.3 on 2020-07-30 04:40
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('accounts', '0002_auto_20200729_1825'),
]
operations = [
migrations.AlterField(
model_name='student',
name='level',
field=models.CharField(choices=[('Bachloar', 'Bachloar Degree'), ('Master', 'Master Degree')], max_length=25, null=True),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 2.2.3 on 2020-08-22 19:38
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('accounts', '0003_auto_20200730_0740'),
]
operations = [
migrations.AlterField(
model_name='user',
name='picture',
field=models.ImageField(default='default.png', null=True, upload_to='profile_pictures/%y/%m/%d/'),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 2.2.3 on 2020-08-22 19:46
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('accounts', '0004_auto_20200822_2238'),
]
operations = [
migrations.AlterField(
model_name='user',
name='picture',
field=models.ImageField(blank=True, null=True, upload_to='profile_pictures/%y/%m/%d/'),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 2.2.3 on 2020-08-22 20:08
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('accounts', '0005_auto_20200822_2246'),
]
operations = [
migrations.AlterField(
model_name='user',
name='picture',
field=models.ImageField(default='default.png', null=True, upload_to='profile_pictures/%y/%m/%d/'),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 3.1 on 2020-08-25 09:48
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('accounts', '0006_auto_20200822_2308'),
]
operations = [
migrations.AlterField(
model_name='user',
name='first_name',
field=models.CharField(blank=True, max_length=150, verbose_name='first name'),
),
]

View File

@ -1,38 +0,0 @@
# Generated by Django 2.2 on 2020-08-31 10:15
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('accounts', '0007_auto_20200825_1248'),
]
operations = [
migrations.AddField(
model_name='user',
name='is_parent',
field=models.BooleanField(default=False),
),
migrations.AlterField(
model_name='user',
name='first_name',
field=models.CharField(blank=True, max_length=30, verbose_name='first name'),
),
migrations.CreateModel(
name='Family',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('first_name', models.CharField(max_length=120)),
('last_name', models.CharField(max_length=120)),
('phone', models.CharField(blank=True, max_length=60, null=True)),
('address', models.CharField(blank=True, max_length=60, null=True)),
('email', models.EmailField(blank=True, max_length=254, null=True)),
('relation_ship', models.TextField(blank=True, choices=[('Father', 'Father'), ('Mother', 'Mother'), ('Brother', 'Brother'), ('Sister', 'Sister'), ('Grand mother', 'Grand mother'), ('Grand father', 'Grand father'), ('Other', 'Other')])),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
),
]

View File

@ -1,27 +0,0 @@
# Generated by Django 2.2 on 2020-09-06 11:03
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('accounts', '0008_auto_20200831_1315'),
]
operations = [
migrations.CreateModel(
name='Parent',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('relation_ship', models.TextField(blank=True, choices=[('Father', 'Father'), ('Mother', 'Mother'), ('Brother', 'Brother'), ('Sister', 'Sister'), ('Grand mother', 'Grand mother'), ('Grand father', 'Grand father'), ('Other', 'Other')])),
('student', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='accounts.Student')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
),
migrations.DeleteModel(
name='Family',
),
]

View File

@ -1,30 +0,0 @@
# Generated by Django 3.1.3 on 2021-04-01 14:18
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('accounts', '0009_auto_20200906_1403'),
]
operations = [
migrations.AlterField(
model_name='parent',
name='student',
field=models.OneToOneField(null=True, on_delete=django.db.models.deletion.SET_NULL, to='accounts.student'),
),
migrations.AlterField(
model_name='parent',
name='user',
field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
),
migrations.AlterField(
model_name='user',
name='first_name',
field=models.CharField(blank=True, max_length=150, verbose_name='first name'),
),
]

View File

@ -1,29 +0,0 @@
# Generated by Django 3.1.3 on 2021-08-23 05:25
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('course', '0004_auto_20200822_2238'),
('accounts', '0010_auto_20210401_1718'),
]
operations = [
migrations.AddField(
model_name='user',
name='is_dep_head',
field=models.BooleanField(default=False),
),
migrations.CreateModel(
name='DepHead',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('department', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='course.program')),
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
),
]

View File

@ -1,40 +0,0 @@
# Generated by Django 3.1.3 on 2023-01-12 19:38
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('course', '0004_auto_20200822_2238'),
('accounts', '0011_auto_20210823_0825'),
]
operations = [
migrations.RenameModel(
old_name='DepHead',
new_name='DepartmentHead',
),
migrations.AddField(
model_name='parent',
name='email',
field=models.EmailField(blank=True, max_length=254, null=True),
),
migrations.AddField(
model_name='parent',
name='first_name',
field=models.CharField(default='first', max_length=120),
preserve_default=False,
),
migrations.AddField(
model_name='parent',
name='last_name',
field=models.CharField(default='last', max_length=120),
preserve_default=False,
),
migrations.AddField(
model_name='parent',
name='phone',
field=models.CharField(blank=True, max_length=60, null=True),
),
]

View File

@ -1,33 +0,0 @@
# Generated by Django 4.1.6 on 2023-02-01 12:30
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('accounts', '0012_auto_20230112_2238'),
]
operations = [
migrations.AlterField(
model_name='departmenthead',
name='id',
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
),
migrations.AlterField(
model_name='parent',
name='id',
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
),
migrations.AlterField(
model_name='student',
name='id',
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
),
migrations.AlterField(
model_name='user',
name='id',
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
),
]

View File

@ -1,17 +0,0 @@
# Generated by Django 4.1.6 on 2023-05-14 08:05
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("accounts", "0013_alter_departmenthead_id_alter_parent_id_and_more"),
]
operations = [
migrations.AlterModelManagers(
name="user",
managers=[],
),
]

View File

@ -1,20 +0,0 @@
# Generated by Django 4.0.8 on 2023-12-25 20:16
import accounts.models
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('accounts', '0014_alter_user_managers'),
]
operations = [
migrations.AlterModelManagers(
name='user',
managers=[
('objects', accounts.models.UserManager()),
],
),
]

View File

@ -1,20 +0,0 @@
# Generated by Django 4.0.8 on 2023-12-30 19:04
import accounts.models
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('accounts', '0015_alter_user_managers'),
]
operations = [
migrations.AlterModelManagers(
name='user',
managers=[
('objects', accounts.models.CustomUserManager()),
],
),
]

View File

@ -1,29 +0,0 @@
# Generated by Django 4.0.8 on 2023-12-31 07:50
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('accounts', '0016_alter_user_managers'),
]
operations = [
migrations.AlterModelOptions(
name='departmenthead',
options={'ordering': ('-user__date_joined',)},
),
migrations.AlterModelOptions(
name='parent',
options={'ordering': ('-user__date_joined',)},
),
migrations.AlterModelOptions(
name='student',
options={'ordering': ('-student__date_joined',)},
),
migrations.AlterModelOptions(
name='user',
options={'ordering': ('-date_joined',)},
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 4.0.8 on 2024-01-06 13:41
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('accounts', '0017_alter_departmenthead_options_alter_parent_options_and_more'),
]
operations = [
migrations.RenameField(
model_name='student',
old_name='department',
new_name='program',
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 4.0.8 on 2024-01-31 21:17
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('accounts', '0018_rename_department_student_program'),
]
operations = [
migrations.AddField(
model_name='user',
name='gender',
field=models.CharField(blank=True, choices=[('M', 'Male'), ('F', 'Female')], max_length=1, null=True),
),
]

View File

@ -37,7 +37,6 @@ AUTH_USER_MODEL = "accounts.User"
DJANGO_APPS = [ DJANGO_APPS = [
"jet.dashboard", "jet.dashboard",
"jet", "jet",
"django_extensions",
"django.contrib.admin", "django.contrib.admin",
"django.contrib.auth", "django.contrib.auth",
"django.contrib.contenttypes", "django.contrib.contenttypes",
@ -109,24 +108,10 @@ ASGI_APPLICATION = "config.asgi.application"
# Database # Database
# https://docs.djangoproject.com/en/2.2/ref/settings/#databases # https://docs.djangoproject.com/en/2.2/ref/settings/#databases
# DATABASES = {
# 'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
# }
# }
# -----------------------------
# NOTE: Some model fields may not work on sqlite db,
# so consider using postgresql instead
DATABASES = { DATABASES = {
"default": { "default": {
"ENGINE": config("DB_ENGINE", default="django.db.backends.postgresql_psycopg2"), "ENGINE": "django.db.backends.sqlite3",
"NAME": config("DB_NAME"), "NAME": os.path.join(BASE_DIR, "db.sqlite3"),
"USER": config("DB_USER"),
"PASSWORD": config("DB_PASSWORD"),
"HOST": config("DB_HOST", default="localhost"),
"PORT": config("DB_PORT", default=5432),
} }
} }

View File

@ -1,97 +1,53 @@
# Generated by Django 2.2.3 on 2020-07-29 15:25 # Generated by Django 4.0.8 on 2024-08-31 11:51
from django.db import migrations, models from django.db import migrations, models
import django.db.models.deletion import django.db.models.deletion
class Migration(migrations.Migration): class Migration(migrations.Migration):
initial = True initial = True
dependencies = [] dependencies = [
]
operations = [ operations = [
migrations.CreateModel( migrations.CreateModel(
name="NewsAndEvents", name='ActivityLog',
fields=[ fields=[
( ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
"id", ('message', models.TextField()),
models.AutoField( ('created_at', models.DateTimeField(auto_now=True)),
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("title", models.CharField(max_length=200, null=True)),
("summary", models.TextField(blank=True, max_length=200, null=True)),
(
"posted_as",
models.CharField(
choices=[("News", "News"), ("Event", "Event")], max_length=10
),
),
("updated_date", models.DateTimeField(auto_now=True, null=True)),
("upload_time", models.DateTimeField(auto_now_add=True, null=True)),
], ],
), ),
migrations.CreateModel( migrations.CreateModel(
name="Session", name='NewsAndEvents',
fields=[ fields=[
( ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
"id", ('title', models.CharField(max_length=200, null=True)),
models.AutoField( ('summary', models.TextField(blank=True, max_length=200, null=True)),
auto_created=True, ('posted_as', models.CharField(choices=[('News', 'News'), ('Event', 'Event')], max_length=10)),
primary_key=True, ('updated_date', models.DateTimeField(auto_now=True, null=True)),
serialize=False, ('upload_time', models.DateTimeField(auto_now_add=True, null=True)),
verbose_name="ID",
),
),
("session", models.CharField(max_length=200, unique=True)),
(
"is_current_session",
models.BooleanField(blank=True, default=False, null=True),
),
("next_session_begins", models.DateField(blank=True, null=True)),
], ],
), ),
migrations.CreateModel( migrations.CreateModel(
name="Semester", name='Session',
fields=[ fields=[
( ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
"id", ('session', models.CharField(max_length=200, unique=True)),
models.AutoField( ('is_current_session', models.BooleanField(blank=True, default=False, null=True)),
auto_created=True, ('next_session_begins', models.DateField(blank=True, null=True)),
primary_key=True, ],
serialize=False, ),
verbose_name="ID", migrations.CreateModel(
), name='Semester',
), fields=[
( ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
"semester", ('semester', models.CharField(blank=True, choices=[('First', 'First'), ('Second', 'Second'), ('Third', 'Third')], max_length=10)),
models.CharField( ('is_current_semester', models.BooleanField(blank=True, default=False, null=True)),
blank=True, ('next_semester_begins', models.DateField(blank=True, null=True)),
choices=[ ('session', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='core.session')),
("First", "First"),
("Second", "Second"),
("Third", "Third"),
],
max_length=10,
),
),
(
"is_current_semester",
models.BooleanField(blank=True, default=False, null=True),
),
("next_semester_begins", models.DateField(blank=True, null=True)),
(
"session",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.CASCADE,
to="core.Session",
),
),
], ],
), ),
] ]

View File

@ -1,22 +0,0 @@
# Generated by Django 2.2.3 on 2020-07-30 04:46
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("core", "0001_initial"),
]
operations = [
migrations.AlterField(
model_name="semester",
name="semester",
field=models.CharField(
blank=True,
choices=[("First", "First"), ("Second", "Second"), ("Third", "Third")],
max_length=10,
unique=True,
),
),
]

View File

@ -1,21 +0,0 @@
# Generated by Django 2.2.3 on 2020-07-30 04:56
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("core", "0002_auto_20200730_0746"),
]
operations = [
migrations.AlterField(
model_name="semester",
name="semester",
field=models.CharField(
blank=True,
choices=[("First", "First"), ("Second", "Second"), ("Third", "Third")],
max_length=10,
),
),
]

View File

@ -1,33 +0,0 @@
# Generated by Django 4.1.6 on 2023-02-01 12:30
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("core", "0003_auto_20200730_0756"),
]
operations = [
migrations.AlterField(
model_name="newsandevents",
name="id",
field=models.BigAutoField(
auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
),
),
migrations.AlterField(
model_name="semester",
name="id",
field=models.BigAutoField(
auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
),
),
migrations.AlterField(
model_name="session",
name="id",
field=models.BigAutoField(
auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
),
),
]

View File

@ -1,21 +0,0 @@
# Generated by Django 4.0.8 on 2024-01-12 15:04
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('core', '0004_alter_newsandevents_id_alter_semester_id_and_more'),
]
operations = [
migrations.CreateModel(
name='ActivityLog',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('message', models.TextField()),
('created_at', models.DateTimeField(auto_now=True)),
],
),
]

View File

@ -1,4 +1,4 @@
# Generated by Django 2.2.3 on 2020-07-29 15:25 # Generated by Django 4.0.8 on 2024-08-31 11:51
from django.conf import settings from django.conf import settings
import django.core.validators import django.core.validators
@ -7,177 +7,81 @@ import django.db.models.deletion
class Migration(migrations.Migration): class Migration(migrations.Migration):
initial = True initial = True
dependencies = [ dependencies = [
('accounts', '0001_initial'),
('core', '0001_initial'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL), migrations.swappable_dependency(settings.AUTH_USER_MODEL),
("core", "0001_initial"),
] ]
operations = [ operations = [
migrations.CreateModel( migrations.CreateModel(
name="Course", name='Course',
fields=[ fields=[
( ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
"id", ('slug', models.SlugField(blank=True, unique=True)),
models.AutoField( ('title', models.CharField(max_length=200, null=True)),
auto_created=True, ('code', models.CharField(max_length=200, null=True, unique=True)),
primary_key=True, ('credit', models.IntegerField(default=0, null=True)),
serialize=False, ('summary', models.TextField(blank=True, max_length=200, null=True)),
verbose_name="ID", ('level', models.CharField(choices=[('Bachelor', 'Bachelor Degree'), ('Master', 'Master Degree')], max_length=25, null=True)),
), ('year', models.IntegerField(choices=[(1, '1'), (2, '2'), (3, '3'), (4, '4'), (4, '5'), (4, '6')], default=0)),
), ('semester', models.CharField(choices=[('First', 'First'), ('Second', 'Second'), ('Third', 'Third')], max_length=200)),
("slug", models.SlugField(blank=True, unique=True)), ('is_elective', models.BooleanField(blank=True, default=False, null=True)),
("title", models.CharField(max_length=200, null=True)),
("code", models.CharField(max_length=200, null=True, unique=True)),
("credit", models.IntegerField(default=0, null=True)),
("summary", models.TextField(blank=True, max_length=200, null=True)),
(
"level",
models.CharField(
choices=[
("Level course", "Level course"),
("Bachloar", "Bachloar"),
("Master", "Master"),
],
max_length=25,
null=True,
),
),
(
"year",
models.IntegerField(
choices=[
(1, "1"),
(2, "2"),
(3, "3"),
(4, "4"),
(4, "5"),
(4, "6"),
],
default=0,
),
),
(
"semester",
models.CharField(
choices=[
("First", "First"),
("Second", "Second"),
("Third", "Third"),
],
max_length=200,
),
),
(
"is_elective",
models.BooleanField(blank=True, default=False, null=True),
),
], ],
), ),
migrations.CreateModel( migrations.CreateModel(
name="Program", name='Program',
fields=[ fields=[
( ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
"id", ('title', models.CharField(max_length=150, unique=True)),
models.AutoField( ('summary', models.TextField(blank=True, null=True)),
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("title", models.CharField(max_length=150, unique=True)),
("summary", models.TextField(blank=True, null=True)),
], ],
), ),
migrations.CreateModel( migrations.CreateModel(
name="Upload", name='UploadVideo',
fields=[ fields=[
( ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
"id", ('title', models.CharField(max_length=100)),
models.AutoField( ('slug', models.SlugField(blank=True, unique=True)),
auto_created=True, ('video', models.FileField(help_text='Valid video formats: mp4, mkv, wmv, 3gp, f4v, avi, mp3', upload_to='course_videos/', validators=[django.core.validators.FileExtensionValidator(['mp4', 'mkv', 'wmv', '3gp', 'f4v', 'avi', 'mp3'])])),
primary_key=True, ('summary', models.TextField(blank=True, null=True)),
serialize=False, ('timestamp', models.DateTimeField(auto_now_add=True, null=True)),
verbose_name="ID", ('course', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='course.course')),
),
),
("title", models.CharField(max_length=100)),
(
"file",
models.FileField(
upload_to="course_files/",
validators=[
django.core.validators.FileExtensionValidator(
[
"pdf",
"docx",
"doc",
"xls",
"xlsx",
"ppt",
"pptx",
"zip",
"rar",
"7zip",
]
)
],
),
),
("updated_date", models.DateTimeField(auto_now=True, null=True)),
("upload_time", models.DateTimeField(auto_now_add=True, null=True)),
(
"course",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE, to="course.Course"
),
),
], ],
), ),
migrations.CreateModel( migrations.CreateModel(
name="CourseAllocation", name='Upload',
fields=[ fields=[
( ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
"id", ('title', models.CharField(max_length=100)),
models.AutoField( ('file', models.FileField(help_text='Valid Files: pdf, docx, doc, xls, xlsx, ppt, pptx, zip, rar, 7zip', upload_to='course_files/', validators=[django.core.validators.FileExtensionValidator(['pdf', 'docx', 'doc', 'xls', 'xlsx', 'ppt', 'pptx', 'zip', 'rar', '7zip'])])),
auto_created=True, ('updated_date', models.DateTimeField(auto_now=True, null=True)),
primary_key=True, ('upload_time', models.DateTimeField(auto_now_add=True, null=True)),
serialize=False, ('course', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='course.course')),
verbose_name="ID", ],
), ),
), migrations.CreateModel(
( name='CourseOffer',
"courses", fields=[
models.ManyToManyField( ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
related_name="allocated_course", to="course.Course" ('dep_head', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='accounts.departmenthead')),
), ],
), ),
( migrations.CreateModel(
"lecturer", name='CourseAllocation',
models.ForeignKey( fields=[
on_delete=django.db.models.deletion.CASCADE, ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
related_name="allocated_lecturer", ('courses', models.ManyToManyField(related_name='allocated_course', to='course.course')),
to=settings.AUTH_USER_MODEL, ('lecturer', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='allocated_lecturer', to=settings.AUTH_USER_MODEL)),
), ('session', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='core.session')),
),
(
"session",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.CASCADE,
to="core.Session",
),
),
], ],
), ),
migrations.AddField( migrations.AddField(
model_name="course", model_name='course',
name="program", name='program',
field=models.ForeignKey( field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='course.program'),
on_delete=django.db.models.deletion.CASCADE, to="course.Program"
),
), ),
] ]

View File

@ -1,27 +0,0 @@
# Generated by Django 2.2.3 on 2020-08-03 09:24
import django.core.validators
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('course', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='UploadVideo',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(max_length=100)),
('slug', models.SlugField(blank=True, unique=True)),
('video', models.FileField(upload_to='videos/', validators=[django.core.validators.FileExtensionValidator(['mp4', 'mkv', 'wmv', '3gp', 'f4v', 'avi', 'mp3'])])),
('summary', models.TextField(blank=True, null=True)),
('timestamp', models.DateTimeField(auto_now_add=True, null=True)),
('course', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='course.Course')),
],
),
]

View File

@ -1,19 +0,0 @@
# Generated by Django 2.2.3 on 2020-08-03 10:35
import django.core.validators
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('course', '0002_uploadvideo'),
]
operations = [
migrations.AlterField(
model_name='uploadvideo',
name='video',
field=models.FileField(upload_to='course_videos/', validators=[django.core.validators.FileExtensionValidator(['mp4', 'mkv', 'wmv', '3gp', 'f4v', 'avi', 'mp3'])]),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 2.2.3 on 2020-08-22 19:38
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('course', '0003_auto_20200803_1335'),
]
operations = [
migrations.AlterField(
model_name='course',
name='level',
field=models.CharField(choices=[('Bachloar', 'Bachloar Degree'), ('Master', 'Master Degree')], max_length=25, null=True),
),
]

View File

@ -1,38 +0,0 @@
# Generated by Django 4.1.6 on 2023-02-01 12:30
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('course', '0004_auto_20200822_2238'),
]
operations = [
migrations.AlterField(
model_name='course',
name='id',
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
),
migrations.AlterField(
model_name='courseallocation',
name='id',
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
),
migrations.AlterField(
model_name='program',
name='id',
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
),
migrations.AlterField(
model_name='upload',
name='id',
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
),
migrations.AlterField(
model_name='uploadvideo',
name='id',
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
),
]

View File

@ -1,36 +0,0 @@
# Generated by Django 4.1.6 on 2023-05-14 08:05
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
("accounts", "0014_alter_user_managers"),
("course", "0005_alter_course_id_alter_courseallocation_id_and_more"),
]
operations = [
migrations.CreateModel(
name="CourseOffer",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
(
"dep_head",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
to="accounts.departmenthead",
),
),
],
),
]

View File

@ -1,24 +0,0 @@
# Generated by Django 4.0.8 on 2024-01-16 20:14
import django.core.validators
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('course', '0006_courseoffer'),
]
operations = [
migrations.AlterField(
model_name='upload',
name='file',
field=models.FileField(help_text='Valid Files: pdf, docx, doc, xls, xlsx, ppt, pptx, zip, rar, 7zip', upload_to='course_files/', validators=[django.core.validators.FileExtensionValidator(['pdf', 'docx', 'doc', 'xls', 'xlsx', 'ppt', 'pptx', 'zip', 'rar', '7zip'])]),
),
migrations.AlterField(
model_name='uploadvideo',
name='video',
field=models.FileField(help_text='Valid video formats: mp4, mkv, wmv, 3gp, f4v, avi, mp3', upload_to='course_videos/', validators=[django.core.validators.FileExtensionValidator(['mp4', 'mkv', 'wmv', '3gp', 'f4v', 'avi', 'mp3'])]),
),
]

View File

@ -1,7 +1,6 @@
# Generated by Django 3.1.3 on 2021-04-11 09:30 # Generated by Django 4.0.8 on 2024-08-31 11:51
from django.conf import settings from django.conf import settings
import django.contrib.postgres.fields
from django.db import migrations, models from django.db import migrations, models
import django.db.models.deletion import django.db.models.deletion
@ -15,17 +14,10 @@ class Migration(migrations.Migration):
] ]
operations = [ operations = [
migrations.CreateModel(
name='TestClass',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('test_name', models.CharField(blank=True, max_length=120, null=True)),
],
),
migrations.CreateModel( migrations.CreateModel(
name='Invoice', name='Invoice',
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('total', models.FloatField(blank=True, null=True)), ('total', models.FloatField(blank=True, null=True)),
('amount', models.FloatField(blank=True, null=True)), ('amount', models.FloatField(blank=True, null=True)),
('payment_complete', models.BooleanField(default=False)), ('payment_complete', models.BooleanField(default=False)),

View File

@ -1,25 +0,0 @@
# Generated by Django 3.1.3 on 2021-04-16 09:14
from django.db import migrations, models
# Function to create initial data for array field in PostgreSQL
def create_array_field_for_postgres(apps, schema_editor):
TestClass = apps.get_model('payments', 'TestClass')
TestClass.objects.create(array=[])
class Migration(migrations.Migration):
dependencies = [
('payments', '0001_initial'),
]
operations = [
# Adding a JSONField for array, which is supported by both PostgreSQL and MySQL
migrations.AddField(
model_name='testclass',
name='array',
field=models.JSONField(blank=True, default=list, null=True),
),
# Running the create_array_field_for_postgres function to populate initial data in PostgreSQL
migrations.RunPython(create_array_field_for_postgres),
]

View File

@ -1,16 +0,0 @@
# Generated by Django 3.1.3 on 2021-04-16 09:18
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('payments', '0002_testclass_array'),
]
operations = [
migrations.DeleteModel(
name='TestClass',
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 4.1.6 on 2023-02-01 12:30
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('payments', '0003_delete_testclass'),
]
operations = [
migrations.AlterField(
model_name='invoice',
name='id',
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
),
]

View File

@ -1,4 +1,4 @@
# Generated by Django 2.2.3 on 2020-07-29 15:25 # Generated by Django 4.0.8 on 2024-08-31 11:51
from django.conf import settings from django.conf import settings
import django.core.validators import django.core.validators
@ -12,16 +12,16 @@ class Migration(migrations.Migration):
initial = True initial = True
dependencies = [ dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('course', '0001_initial'), ('course', '0001_initial'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
] ]
operations = [ operations = [
migrations.CreateModel( migrations.CreateModel(
name='Question', name='Question',
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('figure', models.ImageField(blank=True, null=True, upload_to='uploads/%Y/%m/%d', verbose_name='Figure')), ('figure', models.ImageField(blank=True, help_text="Add an image for the question if it's necessary.", null=True, upload_to='uploads/%Y/%m/%d', verbose_name='Figure')),
('content', models.CharField(help_text='Enter the question text that you want displayed', max_length=1000, verbose_name='Question')), ('content', models.CharField(help_text='Enter the question text that you want displayed', max_length=1000, verbose_name='Question')),
('explanation', models.TextField(blank=True, help_text='Explanation to be shown after the question has been answered.', max_length=2000, verbose_name='Explanation')), ('explanation', models.TextField(blank=True, help_text='Explanation to be shown after the question has been answered.', max_length=2000, verbose_name='Explanation')),
], ],
@ -33,10 +33,10 @@ class Migration(migrations.Migration):
migrations.CreateModel( migrations.CreateModel(
name='Quiz', name='Quiz',
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(max_length=60, verbose_name='Title')), ('title', models.CharField(max_length=60, verbose_name='Title')),
('slug', models.SlugField(blank=True, unique=True)), ('slug', models.SlugField(blank=True, unique=True)),
('description', models.TextField(blank=True, help_text='a description of the quiz', verbose_name='Description')), ('description', models.TextField(blank=True, help_text='A detailed description of the quiz', verbose_name='Description')),
('category', models.TextField(blank=True, choices=[('assignment', 'Assignment'), ('exam', 'Exam'), ('practice', 'Practice Quiz')])), ('category', models.TextField(blank=True, choices=[('assignment', 'Assignment'), ('exam', 'Exam'), ('practice', 'Practice Quiz')])),
('random_order', models.BooleanField(default=False, help_text='Display the questions in a random order or as they are set?', verbose_name='Random Order')), ('random_order', models.BooleanField(default=False, help_text='Display the questions in a random order or as they are set?', verbose_name='Random Order')),
('answers_at_end', models.BooleanField(default=False, help_text='Correct answer is NOT shown after question. Answers displayed at the end.', verbose_name='Answers at end')), ('answers_at_end', models.BooleanField(default=False, help_text='Correct answer is NOT shown after question. Answers displayed at the end.', verbose_name='Answers at end')),
@ -45,7 +45,7 @@ class Migration(migrations.Migration):
('pass_mark', models.SmallIntegerField(blank=True, default=50, help_text='Percentage required to pass exam.', validators=[django.core.validators.MaxValueValidator(100)], verbose_name='Pass Mark')), ('pass_mark', models.SmallIntegerField(blank=True, default=50, help_text='Percentage required to pass exam.', validators=[django.core.validators.MaxValueValidator(100)], verbose_name='Pass Mark')),
('draft', models.BooleanField(blank=True, default=False, help_text='If yes, the quiz is not displayed in the quiz list and can only be taken by users who can edit quizzes.', verbose_name='Draft')), ('draft', models.BooleanField(blank=True, default=False, help_text='If yes, the quiz is not displayed in the quiz list and can only be taken by users who can edit quizzes.', verbose_name='Draft')),
('timestamp', models.DateTimeField(auto_now=True)), ('timestamp', models.DateTimeField(auto_now=True)),
('course', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='course.Course')), ('course', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='course.course')),
], ],
options={ options={
'verbose_name': 'Quiz', 'verbose_name': 'Quiz',
@ -53,9 +53,9 @@ class Migration(migrations.Migration):
}, },
), ),
migrations.CreateModel( migrations.CreateModel(
name='Essay_Question', name='EssayQuestion',
fields=[ fields=[
('question_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='quiz.Question')), ('question_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='quiz.question')),
], ],
options={ options={
'verbose_name': 'Essay style question', 'verbose_name': 'Essay style question',
@ -66,7 +66,7 @@ class Migration(migrations.Migration):
migrations.CreateModel( migrations.CreateModel(
name='MCQuestion', name='MCQuestion',
fields=[ fields=[
('question_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='quiz.Question')), ('question_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='quiz.question')),
('choice_order', models.CharField(blank=True, choices=[('content', 'Content'), ('random', 'Random'), ('none', 'None')], help_text='The order in which multichoice choice options are displayed to the user', max_length=30, null=True, verbose_name='Choice Order')), ('choice_order', models.CharField(blank=True, choices=[('content', 'Content'), ('random', 'Random'), ('none', 'None')], help_text='The order in which multichoice choice options are displayed to the user', max_length=30, null=True, verbose_name='Choice Order')),
], ],
options={ options={
@ -78,7 +78,7 @@ class Migration(migrations.Migration):
migrations.CreateModel( migrations.CreateModel(
name='Sitting', name='Sitting',
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('question_order', models.CharField(max_length=1024, validators=[django.core.validators.RegexValidator(re.compile('^\\d+(?:,\\d+)*\\Z'), code='invalid', message='Enter only digits separated by commas.')], verbose_name='Question Order')), ('question_order', models.CharField(max_length=1024, validators=[django.core.validators.RegexValidator(re.compile('^\\d+(?:,\\d+)*\\Z'), code='invalid', message='Enter only digits separated by commas.')], verbose_name='Question Order')),
('question_list', models.CharField(max_length=1024, validators=[django.core.validators.RegexValidator(re.compile('^\\d+(?:,\\d+)*\\Z'), code='invalid', message='Enter only digits separated by commas.')], verbose_name='Question List')), ('question_list', models.CharField(max_length=1024, validators=[django.core.validators.RegexValidator(re.compile('^\\d+(?:,\\d+)*\\Z'), code='invalid', message='Enter only digits separated by commas.')], verbose_name='Question List')),
('incorrect_questions', models.CharField(blank=True, max_length=1024, validators=[django.core.validators.RegexValidator(re.compile('^\\d+(?:,\\d+)*\\Z'), code='invalid', message='Enter only digits separated by commas.')], verbose_name='Incorrect questions')), ('incorrect_questions', models.CharField(blank=True, max_length=1024, validators=[django.core.validators.RegexValidator(re.compile('^\\d+(?:,\\d+)*\\Z'), code='invalid', message='Enter only digits separated by commas.')], verbose_name='Incorrect questions')),
@ -87,8 +87,8 @@ class Migration(migrations.Migration):
('user_answers', models.TextField(blank=True, default='{}', verbose_name='User Answers')), ('user_answers', models.TextField(blank=True, default='{}', verbose_name='User Answers')),
('start', models.DateTimeField(auto_now_add=True, verbose_name='Start')), ('start', models.DateTimeField(auto_now_add=True, verbose_name='Start')),
('end', models.DateTimeField(blank=True, null=True, verbose_name='End')), ('end', models.DateTimeField(blank=True, null=True, verbose_name='End')),
('course', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='course.Course', verbose_name='Course')), ('course', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='course.course', verbose_name='Course')),
('quiz', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='quiz.Quiz', verbose_name='Quiz')), ('quiz', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='quiz.quiz', verbose_name='Quiz')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='User')), ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='User')),
], ],
options={ options={
@ -98,12 +98,12 @@ class Migration(migrations.Migration):
migrations.AddField( migrations.AddField(
model_name='question', model_name='question',
name='quiz', name='quiz',
field=models.ManyToManyField(blank=True, to='quiz.Quiz', verbose_name='Quiz'), field=models.ManyToManyField(blank=True, to='quiz.quiz', verbose_name='Quiz'),
), ),
migrations.CreateModel( migrations.CreateModel(
name='Progress', name='Progress',
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('score', models.CharField(max_length=1024, validators=[django.core.validators.RegexValidator(re.compile('^\\d+(?:,\\d+)*\\Z'), code='invalid', message='Enter only digits separated by commas.')], verbose_name='Score')), ('score', models.CharField(max_length=1024, validators=[django.core.validators.RegexValidator(re.compile('^\\d+(?:,\\d+)*\\Z'), code='invalid', message='Enter only digits separated by commas.')], verbose_name='Score')),
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='User')), ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='User')),
], ],
@ -115,10 +115,10 @@ class Migration(migrations.Migration):
migrations.CreateModel( migrations.CreateModel(
name='Choice', name='Choice',
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('choice', models.CharField(help_text='Enter the choice text that you want displayed', max_length=1000, verbose_name='Content')), ('choice', models.CharField(help_text='Enter the choice text that you want displayed', max_length=1000, verbose_name='Content')),
('correct', models.BooleanField(default=False, help_text='Is this a correct answer?', verbose_name='Correct')), ('correct', models.BooleanField(default=False, help_text='Is this a correct answer?', verbose_name='Correct')),
('question', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='quiz.MCQuestion', verbose_name='Question')), ('question', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='quiz.mcquestion', verbose_name='Question')),
], ],
options={ options={
'verbose_name': 'Choice', 'verbose_name': 'Choice',

View File

@ -1,38 +0,0 @@
# Generated by Django 4.1.6 on 2023-02-01 12:30
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('quiz', '0001_initial'),
]
operations = [
migrations.AlterField(
model_name='choice',
name='id',
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
),
migrations.AlterField(
model_name='progress',
name='id',
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
),
migrations.AlterField(
model_name='question',
name='id',
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
),
migrations.AlterField(
model_name='quiz',
name='id',
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
),
migrations.AlterField(
model_name='sitting',
name='id',
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
),
]

View File

@ -1,17 +0,0 @@
# Generated by Django 4.0.8 on 2023-12-30 19:04
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('quiz', '0002_alter_choice_id_alter_progress_id_alter_question_id_and_more'),
]
operations = [
migrations.RenameModel(
old_name='Essay_Question',
new_name='EssayQuestion',
),
]

View File

@ -1,23 +0,0 @@
# Generated by Django 4.0.8 on 2023-12-31 07:50
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('quiz', '0003_rename_essay_question_essayquestion'),
]
operations = [
migrations.AlterField(
model_name='question',
name='figure',
field=models.ImageField(blank=True, help_text="Add an image for the question if it's necessary.", null=True, upload_to='uploads/%Y/%m/%d', verbose_name='Figure'),
),
migrations.AlterField(
model_name='quiz',
name='description',
field=models.TextField(blank=True, help_text='A detailed description of the quiz', verbose_name='Description'),
),
]

View File

@ -1,10 +1,5 @@
-r base.txt -r base.txt
psycopg2==2.9.5 # https://github.com/psycopg/psycopg2
# Code quality # Code quality
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
black==22.12.0 # https://github.com/psf/black black==22.12.0 # https://github.com/psf/black
# Django Extensions
django-extensions==3.1.3 # https://github.com/django-extensions/django-extensions

View File

@ -3,7 +3,6 @@
-r base.txt -r base.txt
gunicorn==20.1.0 # https://github.com/benoitc/gunicorn gunicorn==20.1.0 # https://github.com/benoitc/gunicorn
psycopg2==2.9.5 # https://github.com/psycopg/psycopg2
# Django # Django
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------

View File

@ -1,158 +1,46 @@
# Generated by Django 2.2.3 on 2020-07-29 15:25 # Generated by Django 4.0.8 on 2024-08-31 11:51
from django.db import migrations, models from django.db import migrations, models
import django.db.models.deletion import django.db.models.deletion
class Migration(migrations.Migration): class Migration(migrations.Migration):
initial = True initial = True
dependencies = [ dependencies = [
("accounts", "0001_initial"), ('accounts', '0001_initial'),
("course", "0001_initial"), ('course', '0001_initial'),
("core", "0001_initial"),
] ]
operations = [ operations = [
migrations.CreateModel( migrations.CreateModel(
name="TakenCourse", name='TakenCourse',
fields=[ fields=[
( ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
"id", ('assignment', models.DecimalField(decimal_places=2, default=0.0, max_digits=5)),
models.AutoField( ('mid_exam', models.DecimalField(decimal_places=2, default=0.0, max_digits=5)),
auto_created=True, ('quiz', models.DecimalField(decimal_places=2, default=0.0, max_digits=5)),
primary_key=True, ('attendance', models.DecimalField(decimal_places=2, default=0.0, max_digits=5)),
serialize=False, ('final_exam', models.DecimalField(decimal_places=2, default=0.0, max_digits=5)),
verbose_name="ID", ('total', models.DecimalField(decimal_places=2, default=0.0, max_digits=5)),
), ('grade', models.CharField(blank=True, choices=[('A+', 'A+'), ('A', 'A'), ('A-', 'A-'), ('B+', 'B+'), ('B', 'B'), ('B-', 'B-'), ('C+', 'C+'), ('C', 'C'), ('C-', 'C-'), ('D', 'D'), ('F', 'F'), ('NG', 'NG')], max_length=2)),
), ('point', models.DecimalField(decimal_places=2, default=0.0, max_digits=5)),
( ('comment', models.CharField(blank=True, choices=[('PASS', 'PASS'), ('FAIL', 'FAIL')], max_length=200)),
"assignment", ('course', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='taken_courses', to='course.course')),
models.DecimalField(decimal_places=2, default=0.0, max_digits=5), ('student', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='accounts.student')),
),
(
"mid_exam",
models.DecimalField(decimal_places=2, default=0.0, max_digits=5),
),
(
"quiz",
models.DecimalField(decimal_places=2, default=0.0, max_digits=5),
),
(
"attendance",
models.DecimalField(decimal_places=2, default=0.0, max_digits=5),
),
(
"final_exam",
models.DecimalField(decimal_places=2, default=0.0, max_digits=5),
),
(
"total",
models.DecimalField(decimal_places=2, default=0.0, max_digits=5),
),
(
"grade",
models.CharField(
blank=True,
choices=[
("A+", "A+"),
("A", "A"),
("A-", "A-"),
("B+", "B+"),
("B", "B"),
("B-", "B-"),
("C+", "C+"),
("C", "C"),
("C-", "C-"),
("D", "D"),
("F", "F"),
("NG", "NG"),
],
max_length=1,
),
),
(
"point",
models.DecimalField(decimal_places=2, default=0.0, max_digits=5),
),
(
"comment",
models.CharField(
blank=True,
choices=[("PASS", "PASS"), ("FAIL", "FAIL")],
max_length=200,
),
),
(
"course",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="taken_courses",
to="course.Course",
),
),
(
"student",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
to="accounts.Student",
),
),
], ],
), ),
migrations.CreateModel( migrations.CreateModel(
name="Result", name='Result',
fields=[ fields=[
( ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
"id", ('gpa', models.FloatField(null=True)),
models.AutoField( ('cgpa', models.FloatField(null=True)),
auto_created=True, ('semester', models.CharField(choices=[('First', 'First'), ('Second', 'Second'), ('Third', 'Third')], max_length=100)),
primary_key=True, ('session', models.CharField(blank=True, max_length=100, null=True)),
serialize=False, ('level', models.CharField(choices=[('Bachloar', 'Bachloar Degree'), ('Master', 'Master Degree')], max_length=25, null=True)),
verbose_name="ID", ('student', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='accounts.student')),
),
),
("gpa", models.FloatField(null=True)),
("cgpa", models.FloatField(null=True)),
(
"semester",
models.CharField(
choices=[
("First", "First"),
("Second", "Second"),
("Third", "Third"),
],
max_length=100,
),
),
(
"level",
models.CharField(
choices=[
("Level course", "Level course"),
("Bachloar", "Bachloar"),
("Master", "Master"),
],
max_length=25,
null=True,
),
),
(
"session",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.CASCADE,
to="core.Session",
),
),
(
"student",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
to="accounts.Student",
),
),
], ],
), ),
] ]

View File

@ -1,18 +0,0 @@
# Generated by Django 2.2.3 on 2020-07-29 19:33
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('result', '0001_initial'),
]
operations = [
migrations.AlterField(
model_name='result',
name='session',
field=models.CharField(blank=True, max_length=100, null=True),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 2.2.3 on 2020-08-22 19:38
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('result', '0002_auto_20200729_2233'),
]
operations = [
migrations.AlterField(
model_name='result',
name='level',
field=models.CharField(choices=[('Bachloar', 'Bachloar Degree'), ('Master', 'Master Degree')], max_length=25, null=True),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 3.1 on 2020-08-25 09:48
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('result', '0003_auto_20200822_2238'),
]
operations = [
migrations.AlterField(
model_name='takencourse',
name='grade',
field=models.CharField(blank=True, choices=[('A+', 'A+'), ('A', 'A'), ('A-', 'A-'), ('B+', 'B+'), ('B', 'B'), ('B-', 'B-'), ('C+', 'C+'), ('C', 'C'), ('C-', 'C-'), ('D', 'D'), ('F', 'F'), ('NG', 'NG')], max_length=2),
),
]

View File

@ -1,23 +0,0 @@
# Generated by Django 4.1.6 on 2023-02-01 12:30
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('result', '0004_auto_20200825_1248'),
]
operations = [
migrations.AlterField(
model_name='result',
name='id',
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
),
migrations.AlterField(
model_name='takencourse',
name='id',
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
),
]

View File

@ -18,7 +18,7 @@
{% for student in students %}<h3>{{ student.student.user.get_full_name }}</h3>{% endfor %} {% for student in students %}<h3>{{ student.student.user.get_full_name }}</h3>{% endfor %}
{% for marking in marking_list %}<h3>{{ marking }} <small>{{ forloop.counter }}</small></h3>{% endfor %} {% for marking in marking_list %}<h3>{{ marking }} <small>{{ forloop.counter }}</small></h3>{% endfor %}
<form action="" method="GET" class="form-inline justify-content-center bg-white p-4 my-3"> <form action="" method="GET" class="form-inline justify-content-center bg-white p-4 my-3 d-flex gap-3">
<input type="text" name="user_filter" class="form-control" placeholder="User" value="{{ request.GET.user_filter }}"> <input type="text" name="user_filter" class="form-control" placeholder="User" value="{{ request.GET.user_filter }}">
<input type="text" name="quiz_filter" class="form-control" placeholder="Quiz" value="{{ request.GET.quiz_filter }}"> <input type="text" name="quiz_filter" class="form-control" placeholder="Quiz" value="{{ request.GET.quiz_filter }}">
<button type="submit" class="btn btn-outline-secondary">{% trans "Filter"%}</button> <button type="submit" class="btn btn-outline-secondary">{% trans "Filter"%}</button>