Rename app to

This commit is contained in:
papi 2024-01-04 23:00:48 +03:00
parent a2c969e3e4
commit e9e1ae2970
40 changed files with 481 additions and 191 deletions

View File

@ -7,7 +7,7 @@ from django.views.generic import CreateView, ListView
from django.db.models import Q from django.db.models import Q
from django.utils.decorators import method_decorator from django.utils.decorators import method_decorator
from django.contrib.auth.forms import PasswordChangeForm from django.contrib.auth.forms import PasswordChangeForm
from app.models import Session, Semester from core.models import Session, Semester
from course.models import Course from course.models import Course
from result.models import TakenCourse from result.models import TakenCourse
from .decorators import admin_required from .decorators import admin_required

View File

@ -1,5 +0,0 @@
from django.apps import AppConfig
class AppConfig(AppConfig):
name = "app"

View File

@ -1,45 +0,0 @@
# Generated by Django 2.2.3 on 2020-07-29 15:25
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='NewsAndEvents',
fields=[
('id', models.AutoField(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(
name='Session',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, 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(
name='Semester',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('semester', models.CharField(blank=True, choices=[('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='app.Session')),
],
),
]

View File

@ -1,18 +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 = [
('app', '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,18 +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 = [
('app', '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,28 +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 = [
('app', '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

@ -53,7 +53,7 @@ THIRD_PARTY_APPS = [
# Custom apps # Custom apps
PROJECT_APPS = [ PROJECT_APPS = [
"app.apps.AppConfig", "core.apps.CoreConfig",
"accounts.apps.AccountsConfig", "accounts.apps.AccountsConfig",
"course.apps.CourseConfig", "course.apps.CourseConfig",
"result.apps.ResultConfig", "result.apps.ResultConfig",

View File

@ -11,7 +11,7 @@ urlpatterns = [
path( path(
"jet/dashboard/", include("jet.dashboard.urls", "jet-dashboard") "jet/dashboard/", include("jet.dashboard.urls", "jet-dashboard")
), # Django JET dashboard URLS ), # Django JET dashboard URLS
path("", include("app.urls")), path("", include("core.urls")),
path("accounts/", include("accounts.urls")), path("accounts/", include("accounts.urls")),
path("programs/", include("course.urls")), path("programs/", include("course.urls")),
path("result/", include("result.urls")), path("result/", include("result.urls")),

5
core/apps.py Normal file
View File

@ -0,0 +1,5 @@
from django.apps import AppConfig
class CoreConfig(AppConfig):
name = "core"

View File

@ -0,0 +1,97 @@
# Generated by Django 2.2.3 on 2020-07-29 15:25
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
initial = True
dependencies = []
operations = [
migrations.CreateModel(
name="NewsAndEvents",
fields=[
(
"id",
models.AutoField(
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(
name="Session",
fields=[
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
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(
name="Semester",
fields=[
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
(
"semester",
models.CharField(
blank=True,
choices=[
("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

@ -0,0 +1,22 @@
# 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

@ -0,0 +1,21 @@
# 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

@ -0,0 +1,33 @@
# 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

@ -18,7 +18,7 @@ def home_view(request):
"title": "News & Events", "title": "News & Events",
"items": items, "items": items,
} }
return render(request, "app/index.html", context) return render(request, "core/index.html", context)
@login_required @login_required
@ -37,7 +37,7 @@ def post_add(request):
form = NewsAndEventsForm() form = NewsAndEventsForm()
return render( return render(
request, request,
"app/post_add.html", "core/post_add.html",
{ {
"title": "Add Post", "title": "Add Post",
"form": form, "form": form,
@ -63,7 +63,7 @@ def edit_post(request, pk):
form = NewsAndEventsForm(instance=instance) form = NewsAndEventsForm(instance=instance)
return render( return render(
request, request,
"app/post_add.html", "core/post_add.html",
{ {
"title": "Edit Post", "title": "Edit Post",
"form": form, "form": form,
@ -89,7 +89,7 @@ def delete_post(request, pk):
def session_list_view(request): def session_list_view(request):
"""Show list of all sessions""" """Show list of all sessions"""
sessions = Session.objects.all().order_by("-is_current_session", "-session") sessions = Session.objects.all().order_by("-is_current_session", "-session")
return render(request, "app/session_list.html", {"sessions": sessions}) return render(request, "core/session_list.html", {"sessions": sessions})
@login_required @login_required
@ -121,7 +121,7 @@ def session_add_view(request):
else: else:
form = SessionForm() form = SessionForm()
return render(request, "app/session_update.html", {"form": form}) return render(request, "core/session_update.html", {"form": form})
@login_required @login_required
@ -153,7 +153,7 @@ def session_update_view(request, pk):
else: else:
form = SessionForm(instance=session) form = SessionForm(instance=session)
return render(request, "app/session_update.html", {"form": form}) return render(request, "core/session_update.html", {"form": form})
@login_required @login_required
@ -182,7 +182,7 @@ def semester_list_view(request):
semesters = Semester.objects.all().order_by("-is_current_semester", "-semester") semesters = Semester.objects.all().order_by("-is_current_semester", "-semester")
return render( return render(
request, request,
"app/semester_list.html", "core/semester_list.html",
{ {
"semesters": semesters, "semesters": semesters,
}, },
@ -244,7 +244,7 @@ def semester_add_view(request):
return redirect("semester_list") return redirect("semester_list")
else: else:
form = SemesterForm() form = SemesterForm()
return render(request, "app/semester_update.html", {"form": form}) return render(request, "core/semester_update.html", {"form": form})
@login_required @login_required
@ -278,7 +278,7 @@ def semester_update_view(request, pk):
else: else:
form = SemesterForm(instance=semester) form = SemesterForm(instance=semester)
return render(request, "app/semester_update.html", {"form": form}) return render(request, "core/semester_update.html", {"form": form})
@login_required @login_required
@ -297,4 +297,4 @@ def semester_delete_view(request, pk):
@login_required @login_required
@admin_required @admin_required
def dashboard_view(request): def dashboard_view(request):
return render(request, "app/dashboard.html") return render(request, "core/dashboard.html")

View File

@ -7,61 +7,177 @@ import django.db.models.deletion
class Migration(migrations.Migration): class Migration(migrations.Migration):
initial = True initial = True
dependencies = [ dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL), migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('app', '0001_initial'), ("core", "0001_initial"),
] ]
operations = [ operations = [
migrations.CreateModel( migrations.CreateModel(
name='Course', name="Course",
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), (
('slug', models.SlugField(blank=True, unique=True)), "id",
('title', models.CharField(max_length=200, null=True)), models.AutoField(
('code', models.CharField(max_length=200, null=True, unique=True)), auto_created=True,
('credit', models.IntegerField(default=0, null=True)), primary_key=True,
('summary', models.TextField(blank=True, max_length=200, null=True)), serialize=False,
('level', models.CharField(choices=[('Level course', 'Level course'), ('Bachloar', 'Bachloar'), ('Master', 'Master')], max_length=25, null=True)), verbose_name="ID",
('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)), ("slug", models.SlugField(blank=True, unique=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.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), (
('title', models.CharField(max_length=150, unique=True)), "id",
('summary', models.TextField(blank=True, null=True)), models.AutoField(
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="Upload",
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), (
('title', models.CharField(max_length=100)), "id",
('file', models.FileField(upload_to='course_files/', validators=[django.core.validators.FileExtensionValidator(['pdf', 'docx', 'doc', 'xls', 'xlsx', 'ppt', 'pptx', 'zip', 'rar', '7zip'])])), models.AutoField(
('updated_date', models.DateTimeField(auto_now=True, null=True)), auto_created=True,
('upload_time', models.DateTimeField(auto_now_add=True, null=True)), primary_key=True,
('course', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='course.Course')), serialize=False,
verbose_name="ID",
),
),
("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="CourseAllocation",
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), (
('courses', models.ManyToManyField(related_name='allocated_course', to='course.Course')), "id",
('lecturer', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='allocated_lecturer', to=settings.AUTH_USER_MODEL)), models.AutoField(
('session', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='app.Session')), auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
(
"courses",
models.ManyToManyField(
related_name="allocated_course", to="course.Course"
),
),
(
"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",
),
),
], ],
), ),
migrations.AddField( migrations.AddField(
model_name='course', model_name="course",
name='program', name="program",
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='course.Program'), field=models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE, to="course.Program"
),
), ),
] ]

View File

@ -8,7 +8,6 @@ from django.db.models import Q
# project import # project import
from .utils import * from .utils import *
YEARS = ( YEARS = (
(1, "1"), (1, "1"),
(2, "2"), (2, "2"),
@ -101,7 +100,7 @@ class Course(models.Model):
@property @property
def is_current_semester(self): def is_current_semester(self):
from app.models import Semester from core.models import Semester
current_semester = Semester.objects.get(is_current_semester=True) current_semester = Semester.objects.get(is_current_semester=True)
@ -127,7 +126,7 @@ class CourseAllocation(models.Model):
) )
courses = models.ManyToManyField(Course, related_name="allocated_course") courses = models.ManyToManyField(Course, related_name="allocated_course")
session = models.ForeignKey( session = models.ForeignKey(
"app.Session", on_delete=models.CASCADE, blank=True, null=True "core.Session", on_delete=models.CASCADE, blank=True, null=True
) )
def __str__(self): def __str__(self):

View File

@ -9,7 +9,7 @@ from django.utils.decorators import method_decorator
from django.views.generic import ListView from django.views.generic import ListView
from accounts.models import User, Student from accounts.models import User, Student
from app.models import Session, Semester from core.models import Session, Semester
from result.models import TakenCourse from result.models import TakenCourse
from accounts.decorators import lecturer_required, student_required from accounts.decorators import lecturer_required, student_required
from .forms import ( from .forms import (

View File

@ -5,43 +5,154 @@ 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"),
('app', '0001_initial'), ("core", "0001_initial"),
] ]
operations = [ operations = [
migrations.CreateModel( migrations.CreateModel(
name='TakenCourse', name="TakenCourse",
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), (
('assignment', models.DecimalField(decimal_places=2, default=0.0, max_digits=5)), "id",
('mid_exam', models.DecimalField(decimal_places=2, default=0.0, max_digits=5)), models.AutoField(
('quiz', models.DecimalField(decimal_places=2, default=0.0, max_digits=5)), auto_created=True,
('attendance', models.DecimalField(decimal_places=2, default=0.0, max_digits=5)), primary_key=True,
('final_exam', models.DecimalField(decimal_places=2, default=0.0, max_digits=5)), serialize=False,
('total', models.DecimalField(decimal_places=2, default=0.0, max_digits=5)), verbose_name="ID",
('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')), "assignment",
('student', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='accounts.Student')), models.DecimalField(decimal_places=2, default=0.0, max_digits=5),
),
(
"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.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), (
('gpa', models.FloatField(null=True)), "id",
('cgpa', models.FloatField(null=True)), models.AutoField(
('semester', models.CharField(choices=[('First', 'First'), ('Second', 'Second'), ('Third', 'Third')], max_length=100)), auto_created=True,
('level', models.CharField(choices=[('Level course', 'Level course'), ('Bachloar', 'Bachloar'), ('Master', 'Master')], max_length=25, null=True)), primary_key=True,
('session', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='app.Session')), serialize=False,
('student', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='accounts.Student')), verbose_name="ID",
),
),
("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

@ -2,7 +2,7 @@ from django.db import models
from django.urls import reverse from django.urls import reverse
from accounts.models import Student from accounts.models import Student
from app.models import Semester from core.models import Semester
from course.models import Course from course.models import Course
YEARS = ( YEARS = (

View File

@ -22,7 +22,7 @@ from reportlab.lib.units import inch
from reportlab.lib import colors from reportlab.lib import colors
from accounts.models import Student from accounts.models import Student
from app.models import Session, Semester from core.models import Session, Semester
from course.models import Course from course.models import Course
from accounts.decorators import lecturer_required, student_required from accounts.decorators import lecturer_required, student_required
from .models import TakenCourse, Result, FIRST, SECOND from .models import TakenCourse, Result, FIRST, SECOND

View File

@ -1,6 +1,6 @@
from itertools import chain from itertools import chain
from django.views.generic import ListView from django.views.generic import ListView
from app.models import NewsAndEvents from core.models import NewsAndEvents
from course.models import Program, Course from course.models import Program, Course
from quiz.models import Quiz from quiz.models import Quiz