Migrate to django==4.1.6

Project migrated to latest django version==4.1.6
This commit is contained in:
Adil Mohammed 2023-02-01 16:26:50 +03:00
parent 4161b8b87d
commit 78cbd76047
20 changed files with 387 additions and 158 deletions

View File

@ -12,11 +12,13 @@ https://docs.djangoproject.com/en/2.2/ref/settings/
import os import os
import posixpath import posixpath
import environ
env = environ.Env()
# Build paths inside the project like this: os.path.join(BASE_DIR, ...) # Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# Quick-start development settings - unsuitable for production # Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/2.2/howto/deployment/checklist/ # See https://docs.djangoproject.com/en/2.2/howto/deployment/checklist/
@ -103,9 +105,6 @@ ASGI_APPLICATION = "SMS.asgi.application"
# Database # Database
# https://docs.djangoproject.com/en/2.2/ref/settings/#databases # https://docs.djangoproject.com/en/2.2/ref/settings/#databases
# -----------------------------
# Uncomment this if you want to use sqlite db
# DATABASES = { # DATABASES = {
# 'default': { # 'default': {
# 'ENGINE': 'django.db.backends.sqlite3', # 'ENGINE': 'django.db.backends.sqlite3',
@ -113,18 +112,22 @@ ASGI_APPLICATION = "SMS.asgi.application"
# } # }
# } # }
# postgresql db configuration # -----------------------------
# Some model fields may not work on sqlite db, so configure your postgresql
DATABASES = { DATABASES = {
'default': { 'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2', 'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': '[db_name]', 'NAME': env('DB_NAME'),
'USER': '[username]', 'USER': env('DB_USER'),
'PASSWORD': '[password]', 'PASSWORD': env('DB_PASSWORD'),
'HOST': 'localhost', 'HOST': env('DB_HOST'),
'POST': '', 'PORT': env('DB_PORT'),
} }
} }
# https://docs.djangoproject.com/en/stable/ref/settings/#std:setting-DEFAULT_AUTO_FIELD
DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"
# Password validation # Password validation
# https://docs.djangoproject.com/en/2.2/ref/settings/#auth-password-validators # https://docs.djangoproject.com/en/2.2/ref/settings/#auth-password-validators

View File

@ -1,5 +1,4 @@
from django.contrib import admin from django.contrib import admin
from django.conf.urls import url
from django.urls import path, include from django.urls import path, include
from django.conf.urls import handler404, handler500, handler400 from django.conf.urls import handler404, handler500, handler400
from django.conf import settings from django.conf import settings
@ -7,18 +6,18 @@ from django.conf.urls.static import static
urlpatterns = [ urlpatterns = [
url(r'^', include('app.urls')), path('', include('app.urls')),
url(r'^accounts/', include('accounts.urls')), path('accounts/', include('accounts.urls')),
url(r'^programs/', include('course.urls')), path('programs/', include('course.urls')),
url(r'^result/', include('result.urls')), path('result/', include('result.urls')),
url(r'^search/', include('search.urls')), path('search/', include('search.urls')),
url(r'^quiz/', include('quiz.urls')), path('quiz/', include('quiz.urls')),
url(r'^payments/', include('payments.urls')), path('payments/', include('payments.urls')),
url('accounts/api/', include('accounts.api.urls', namespace='accounts-api')), path('accounts/api/', include('accounts.api.urls', namespace='accounts-api')),
url(r'^admin/', admin.site.urls), path('admin/', admin.site.urls),
] ]
if settings.DEBUG: if settings.DEBUG:

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 = [
('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,4 +1,3 @@
from django.conf.urls import url
from django.urls import path, include from django.urls import path, include
from django.contrib.auth.views import ( from django.contrib.auth.views import (
PasswordResetView, PasswordResetDoneView, PasswordResetConfirmView, PasswordResetView, PasswordResetDoneView, PasswordResetConfirmView,
@ -18,55 +17,55 @@ from .forms import EmailValidationOnForgotPassword
urlpatterns = [ urlpatterns = [
path('', include('django.contrib.auth.urls')), path('', include('django.contrib.auth.urls')),
url(r'^admin_panel/$', admin_panel, name='admin_panel'), path('admin_panel/', admin_panel, name='admin_panel'),
url(r'^profile/$', profile, name='profile'), path('profile/', profile, name='profile'),
url(r'^profile/(?P<id>\d+)/detail/$', profile_single, name='profile_single'), path('profile/<int:id>/detail/', profile_single, name='profile_single'),
url(r'^setting/$', profile_update, name='edit_profile'), path('setting/', profile_update, name='edit_profile'),
url(r'^change_password/$', change_password, name='change_password'), path('change_password/', change_password, name='change_password'),
url(r'^lecturers/$', LecturerListView.as_view(), name='lecturer_list'), path('lecturers/', LecturerListView.as_view(), name='lecturer_list'),
url(r'^lecturer/add/$', staff_add_view, name='add_lecturer'), path('lecturer/add/', staff_add_view, name='add_lecturer'),
url(r'^staff/(?P<pk>\d+)/edit/$', edit_staff, name='staff_edit'), path('staff/<int:pk>/edit/', edit_staff, name='staff_edit'),
url(r'^lecturers/(?P<pk>\d+)/delete/$', delete_staff, name='lecturer_delete'), path('lecturers/<int:pk>/delete/', delete_staff, name='lecturer_delete'),
url(r'^students/$', StudentListView.as_view(), name='student_list'), path('students/', StudentListView.as_view(), name='student_list'),
url(r'^student/add/$', student_add_view, name='add_student'), path('student/add/', student_add_view, name='add_student'),
url(r'^student/(?P<pk>\d+)/edit/$', edit_student, name='student_edit'), path('student/<int:pk>/edit/', edit_student, name='student_edit'),
url(r'^students/(?P<pk>\d+)/delete/$', delete_student, name='student_delete'), path('students/<int:pk>/delete/', delete_student, name='student_delete'),
url(r'^parents/add/$', ParentAdd.as_view(), name='add_parent'), path('parents/add/', ParentAdd.as_view(), name='add_parent'),
url(r'^ajax/validate-username/$', validate_username, name='validate_username'), path('ajax/validate-username/', validate_username, name='validate_username'),
url(r'^register/$', register, name='register'), path('register/', register, name='register'),
# url(r'^add-student/$', StudentAddView.as_view(), name='add_student'), # path('add-student/', StudentAddView.as_view(), name='add_student'),
# url(r'^programs/course/delete/(?P<pk>\d+)/$', course_delete, name='delete_course'), # path('programs/course/delete/<int:pk>/', course_delete, name='delete_course'),
# Setting urls # Setting urls
# url(r'^profile/(?P<pk>\d+)/edit/$', profileUpdateView, name='edit_profile'), # path('profile/<int:pk>/edit/', profileUpdateView, name='edit_profile'),
# url(r'^profile/(?P<pk>\d+)/change-password/$', changePasswordView, name='change_password'), # path('profile/<int:pk>/change-password/', changePasswordView, name='change_password'),
# ################################################################ # ################################################################
# url(r'^login/$', LoginView.as_view(), name='login'), # path('login/', LoginView.as_view(), name='login'),
# url(r'^logout/$', LogoutView.as_view(), name='logout', kwargs={'next_page': '/'}), # path('logout/', LogoutView.as_view(), name='logout', kwargs={'next_page': '/'}),
# url(r'^password-reset/$', PasswordResetView.as_view( # path('password-reset/', PasswordResetView.as_view(
# form_class=EmailValidationOnForgotPassword, # form_class=EmailValidationOnForgotPassword,
# template_name='registration/password_reset.html' # template_name='registration/password_reset.html'
# ), # ),
# name='password_reset'), # name='password_reset'),
# url(r'^password-reset/done/$', PasswordResetDoneView.as_view( # path('password-reset/done/', PasswordResetDoneView.as_view(
# template_name='registration/password_reset_done.html' # template_name='registration/password_reset_done.html'
# ), # ),
# name='password_reset_done'), # name='password_reset_done'),
# url(r'^password-reset-confirm/<uidb64>/<token>/$', PasswordResetConfirmView.as_view( # path('password-reset-confirm/<uidb64>/<token>/', PasswordResetConfirmView.as_view(
# template_name='registration/password_reset_confirm.html' # template_name='registration/password_reset_confirm.html'
# ), # ),
# name='password_reset_confirm'), # name='password_reset_confirm'),
# url(r'^password-reset-complete/$', PasswordResetCompleteView.as_view( # path('password-reset-complete/', PasswordResetCompleteView.as_view(
# template_name='registration/password_reset_complete.html' # template_name='registration/password_reset_complete.html'
# ), # ),
# name='password_reset_complete') # name='password_reset_complete')

View File

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

@ -1,4 +1,3 @@
from django.conf.urls import url
from django.urls import path from django.urls import path
from .views import ( from .views import (
@ -11,20 +10,20 @@ from .views import (
urlpatterns = [ urlpatterns = [
# Accounts url # Accounts url
url(r'^$', home_view, name='home'), path('', home_view, name='home'),
url(r'^add_item/$', post_add, name='add_item'), path('add_item/', post_add, name='add_item'),
url(r'^item/(?P<pk>\d+)/edit/$', edit_post, name='edit_post'), path('item/<int:pk>/edit/', edit_post, name='edit_post'),
url(r'^item/(?P<pk>\d+)/delete/$', delete_post, name='delete_post'), path('item/<int:pk>/delete/', delete_post, name='delete_post'),
url(r'^session/$', session_list_view, name="session_list"), path('session/', session_list_view, name="session_list"),
url(r'^session/add/$', session_add_view, name="add_session"), path('session/add/', session_add_view, name="add_session"),
url(r'^session/(?P<pk>\d+)/edit/$', session_update_view, name="edit_session"), path('session/<int:pk>/edit/', session_update_view, name="edit_session"),
url(r'^session/(?P<pk>\d+)/delete/$', session_delete_view, name="delete_session"), path('session/<int:pk>/delete/', session_delete_view, name="delete_session"),
url(r'^semester/$', semester_list_view, name="semester_list"), path('semester/', semester_list_view, name="semester_list"),
url(r'^semester/add/$', semester_add_view, name="add_semester"), path('semester/add/', semester_add_view, name="add_semester"),
url(r'^semester/(?P<pk>\d+)/edit/$', semester_update_view, name="edit_semester"), path('semester/<int:pk>/edit/', semester_update_view, name="edit_semester"),
url(r'^semester/(?P<pk>\d+)/delete/$', semester_delete_view, name="delete_semester"), path('semester/<int:pk>/delete/', semester_delete_view, name="delete_semester"),
url(r'^dashboard/$', dashboard_view, name="dashboard"), path('dashboard/', dashboard_view, name="dashboard"),
] ]

View File

@ -0,0 +1,38 @@
# 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,53 +1,41 @@
from django.conf.urls import url
from django.urls import path from django.urls import path
from django.contrib.auth.views import (
PasswordResetView, PasswordResetDoneView, PasswordResetConfirmView,
PasswordResetCompleteView, LoginView, LogoutView
)
# from .views import (
# program_view, program_detail, program_add, program_edit, program_delete,
# course_single, course_add, course_edit, course_delete,
# CourseAllocationFormView, course_allocation_view, edit_allocated_course, deallocate_course,
# handle_file_upload, handle_file_edit, handle_file_delete,
# course_registration, course_drop, user_course_list
# )
from .views import * from .views import *
urlpatterns = [ urlpatterns = [
# Program urls # Program urls
url(r'^$', program_view, name='programs'), path('', program_view, name='programs'),
url(r'^(?P<pk>\d+)/detail/$', program_detail, name='program_detail'), path('<int:pk>/detail/', program_detail, name='program_detail'),
url(r'^add/$', program_add, name='add_program'), path('add/', program_add, name='add_program'),
url(r'^(?P<pk>\d+)/edit/$', program_edit, name='edit_program'), path('<int:pk>/edit/', program_edit, name='edit_program'),
url(r'^(?P<pk>\d+)/delete/$', program_delete, name='program_delete'), path('<int:pk>/delete/', program_delete, name='program_delete'),
# Course urls # Course urls
url(r'^course/(?P<slug>[\w-]+)/detail/$', course_single, name='course_detail'), path('course/<slug>/detail/', course_single, name='course_detail'),
url(r'^(?P<pk>\d+)/course/add/$', course_add, name='course_add'), path('<int:pk>/course/add/', course_add, name='course_add'),
url(r'^course/(?P<slug>[\w-]+)/edit/$', course_edit, name='edit_course'), path('course/<slug>/edit/', course_edit, name='edit_course'),
url(r'^course/delete/(?P<slug>[\w-]+)/$', course_delete, name='delete_course'), path('course/delete/<slug>/', course_delete, name='delete_course'),
# CourseAllocation urls # CourseAllocation urls
url(r'^course/assign/$', CourseAllocationFormView.as_view(), name='course_allocation'), path('course/assign/', CourseAllocationFormView.as_view(), name='course_allocation'),
url(r'^course/allocated/$', course_allocation_view, name='course_allocation_view'), path('course/allocated/', course_allocation_view, name='course_allocation_view'),
url(r'^allocated_course/(?P<pk>\d+)/edit/$', edit_allocated_course, name='edit_allocated_course'), path('allocated_course/<int:pk>/edit/', edit_allocated_course, name='edit_allocated_course'),
url(r'^course/(?P<pk>\d+)/deallocate/$', deallocate_course, name='course_deallocate'), path('course/<int:pk>/deallocate/', deallocate_course, name='course_deallocate'),
# File uploads urls # File uploads urls
url(r'^course/(?P<slug>[\w-]+)/documentations/upload/$', handle_file_upload, name='upload_file_view'), path('course/<slug>/documentations/upload/', handle_file_upload, name='upload_file_view'),
url(r'^course/(?P<slug>[\w-]+)/documentations/(?P<file_id>\d+)/edit/$', handle_file_edit, name='upload_file_edit'), path('course/<slug>/documentations/<int:file_id>/edit/', handle_file_edit, name='upload_file_edit'),
url(r'^course/(?P<slug>[\w-]+)/documentations/(?P<file_id>\d+)/delete/$', handle_file_delete, name='upload_file_delete'), path('course/<slug>/documentations/<int:file_id>/delete/', handle_file_delete, name='upload_file_delete'),
# Video uploads urls # Video uploads urls
url(r'^course/(?P<slug>[\w-]+)/video_tutorials/upload/$', handle_video_upload, name='upload_video'), path('course/<slug>/video_tutorials/upload/', handle_video_upload, name='upload_video'),
url(r'^course/(?P<slug>[\w-]+)/video_tutorials/(?P<video_slug>[\w-]+)/detail/$', handle_video_single, name='video_single'), path('course/<slug>/video_tutorials/<video_slug>/detail/', handle_video_single, name='video_single'),
url(r'^course/(?P<slug>[\w-]+)/video_tutorials/(?P<video_slug>[\w-]+)/edit/$', handle_video_edit, name='upload_video_edit'), path('course/<slug>/video_tutorials/<video_slug>/edit/', handle_video_edit, name='upload_video_edit'),
url(r'^course/(?P<slug>[\w-]+)/video_tutorials/(?P<video_slug>[\w-]+)/delete/$', handle_video_delete, name='upload_video_delete'), path('course/<slug>/video_tutorials/<video_slug>/delete/', handle_video_delete, name='upload_video_delete'),
# course registration # course registration
url(r'^course/registration/$', course_registration, name='course_registration'), path('course/registration/', course_registration, name='course_registration'),
url(r'^course/drop/$', course_drop, name='course_drop'), path('course/drop/', course_drop, name='course_drop'),
url(r'^my_courses/$', user_course_list, name="user_course_list"), path('my_courses/', user_course_list, name="user_course_list"),
] ]

View File

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

View File

@ -2,7 +2,7 @@
"""Django's command-line utility for administrative tasks.""" """Django's command-line utility for administrative tasks."""
import os import os
import sys import sys
import environ
def main(): def main():
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'SMS.settings') os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'SMS.settings')
@ -18,4 +18,6 @@ def main():
if __name__ == '__main__': if __name__ == '__main__':
# OS environment variables take precedence over variables from .env
environ.Env.read_env()
main() main()

View File

@ -0,0 +1,18 @@
# 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,7 +1,7 @@
from django import forms from django import forms
from django.contrib import admin from django.contrib import admin
from django.contrib.admin.widgets import FilteredSelectMultiple from django.contrib.admin.widgets import FilteredSelectMultiple
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import gettext_lazy as _
from .models import Quiz, Progress, Question, MCQuestion, Choice, Essay_Question, Sitting from .models import Quiz, Progress, Question, MCQuestion, Choice, Essay_Question, Sitting

View File

@ -1,7 +1,7 @@
from django import forms from django import forms
from django.forms.widgets import RadioSelect, Textarea from django.forms.widgets import RadioSelect, Textarea
from django.contrib.admin.widgets import FilteredSelectMultiple from django.contrib.admin.widgets import FilteredSelectMultiple
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import gettext_lazy as _
from django.db import transaction from django.db import transaction
from django.forms.models import inlineformset_factory from django.forms.models import inlineformset_factory

View File

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

@ -5,7 +5,7 @@ from django.db import models
from django.urls import reverse from django.urls import reverse
from django.core.exceptions import ValidationError, ImproperlyConfigured from django.core.exceptions import ValidationError, ImproperlyConfigured
from django.core.validators import (MaxValueValidator, validate_comma_separated_integer_list,) from django.core.validators import (MaxValueValidator, validate_comma_separated_integer_list,)
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import gettext_lazy as _
from django.utils.timezone import now from django.utils.timezone import now
from django.conf import settings from django.conf import settings
from django.db.models.signals import pre_save from django.db.models.signals import pre_save

View File

@ -1,23 +1,22 @@
from django.conf.urls import url from django.urls import path
from .views import * from .views import *
urlpatterns = [ urlpatterns = [
url(r'^(?P<slug>[\w-]+)/quizzes/$', quiz_list, name='quiz_index'), path('<slug>/quizzes/', quiz_list, name='quiz_index'),
url(r'^progress/$', view=QuizUserProgressView.as_view(), name='quiz_progress'), path('progress/', view=QuizUserProgressView.as_view(), name='quiz_progress'),
# url(r'^marking/(?P<pk>[\d.]+)/$', view=QuizMarkingList.as_view(), name='quiz_marking'), # path('marking/<int:pk>/', view=QuizMarkingList.as_view(), name='quiz_marking'),
url(r'^marking_list/$', view=QuizMarkingList.as_view(), name='quiz_marking'), path('marking_list/', view=QuizMarkingList.as_view(), name='quiz_marking'),
url(r'^marking/(?P<pk>[\d.]+)/$', view=QuizMarkingDetail.as_view(), name='quiz_marking_detail'), path('marking/<int:pk>/', view=QuizMarkingDetail.as_view(), name='quiz_marking_detail'),
url(r'^(?P<pk>[\d.]+)/(?P<slug>[\w-]+)/take/$', view=QuizTake.as_view(), name='quiz_take'), path('<int:pk>/<slug>/take/', view=QuizTake.as_view(), name='quiz_take'),
url(r'^(?P<slug>[\w-]+)/quiz_add/$', QuizCreateView.as_view(), name='quiz_create'), path('<slug>/quiz_add/', QuizCreateView.as_view(), name='quiz_create'),
url(r'^(?P<slug>[\w-]+)/(?P<pk>[\d.]+)/add/$', QuizUpdateView.as_view(), name='quiz_update'), path('<slug>/<int:pk>/add/', QuizUpdateView.as_view(), name='quiz_update'),
url(r'^(?P<slug>[\w-]+)/(?P<pk>[\d.]+)/delete/$', quiz_delete, name='quiz_delete'), path('<slug>/<int:pk>/delete/', quiz_delete, name='quiz_delete'),
url(r'^mc-question/add/(?P<slug>[\w-]+)/(?P<quiz_id>[\d.]+)/$', MCQuestionCreate.as_view(), name='mc_create'), path('mc-question/add/<slug>/<int:quiz_id>/', MCQuestionCreate.as_view(), name='mc_create'),
# url(r'^mc-question/add/(?P<pk>[\d.]+)/(?P<quiz_pk>[\d.]+)/$', MCQuestionCreate.as_view(), name='mc_create'), # path('mc-question/add/<int:pk>/<quiz_pk>/', MCQuestionCreate.as_view(), name='mc_create'),
] ]

View File

@ -1,40 +1,82 @@
asgiref==3.3.1 alabaster==0.7.13
attrs==21.2.0 arrow==1.2.3
autobahn==21.3.1 asgiref==3.6.0
Automat==20.2.0 attrs==22.2.0
certifi==2020.12.5 autobahn==23.1.1
cffi==1.14.5 Automat==22.10.0
channels==3.0.3 Babel==2.11.0
chardet==4.0.0 binaryornot==0.4.4
black==22.10.0
certifi==2022.12.7
cffi==1.15.1
channels==4.0.0
chardet==5.1.0
charset-normalizer==2.1.1
click==8.1.3
colorama==0.4.6
constantly==15.1.0 constantly==15.1.0
cryptography==3.4.7 cookiecutter==2.1.1
daphne==3.0.2 cryptography==39.0.0
Deprecated==1.2.12 daphne==4.0.0
Django==3.1.3 Deprecated==1.2.13
django-cleanup==5.1.0 Django==4.1.6
django-crispy-forms==1.9.2 django-cleanup==6.0.0
django-model-utils==4.1.1 django-crispy-forms==1.14.0
djangorestframework==3.12.4 django-environ==0.9.0
gopay==1.2.5 django-model-utils==4.3.1
djangorestframework==3.14.0
docutils==0.19
ghp-import==2.1.0
gopay==1.3.0
hyperlink==21.0.0 hyperlink==21.0.0
idna==2.10 idna==3.4
incremental==21.3.0 imagesize==1.4.1
Pillow==8.1.2 incremental==22.10.0
psycopg2==2.8.6 Jinja2==3.1.2
jinja2-time==0.2.0
Markdown==3.3.7
MarkupSafe==2.1.1
mergedeep==1.3.4
mkdocs==1.4.2
mypy-extensions==0.4.3
packaging==21.3
pathspec==0.10.2
Pillow==9.4.0
platformdirs==2.5.4
psycopg2==2.9.5
pyasn1==0.4.8 pyasn1==0.4.8
pyasn1-modules==0.2.8 pyasn1-modules==0.2.8
pycparser==2.20 pycparser==2.21
pyOpenSSL==20.0.1 Pygments==2.14.0
pytz==2021.1 pyOpenSSL==23.0.0
reportlab==3.5.56 pyparsing==3.0.9
requests==2.25.1 python-dateutil==2.8.2
python-slugify==7.0.0
pytz==2022.7.1
PyYAML==6.0
pyyaml_env_tag==0.1
reportlab==3.6.12
requests==2.28.1
service-identity==21.1.0 service-identity==21.1.0
six==1.16.0 six==1.16.0
sqlparse==0.4.1 snowballstemmer==2.2.0
stripe==2.56.0 Sphinx==6.1.3
Twisted==21.2.0 sphinxcontrib-devhelp==1.0.2
twisted-iocpsupport==1.0.1 sphinxcontrib-htmlhelp==2.0.0
txaio==21.2.1 sphinxcontrib-jsmath==1.0.1
urllib3==1.26.4 sphinxcontrib-qthelp==1.0.3
wrapt==1.12.1 sphinxcontrib-serializinghtml==1.1.5
zope.interface==5.4.0 sphinxcontrib.applehelp==1.0.3
sqlparse==0.4.3
stripe==5.0.0
text-unidecode==1.3
tomli==2.0.1
Twisted==22.10.0
twisted-iocpsupport==1.0.2
txaio==23.1.1
typing_extensions==4.4.0
tzdata==2022.7
urllib3==1.26.13
watchdog==2.1.9
wrapt==1.14.1
zope.interface==5.5.2

View File

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

@ -1,4 +1,3 @@
from django.conf.urls import url
from django.urls import path from django.urls import path
from .views import ( from .views import (
add_score, add_score_for, grade_result, assessment_result, add_score, add_score_for, grade_result, assessment_result,
@ -7,12 +6,12 @@ from .views import (
urlpatterns = [ urlpatterns = [
url(r'^manage-score/$', add_score, name='add_score'), path('manage-score/', add_score, name='add_score'),
url(r'^manage-score/(?P<id>\d+)/$', add_score_for, name='add_score_for'), path('manage-score/<int:id>/', add_score_for, name='add_score_for'),
url(r'^grade/$', grade_result, name="grade_results"), path('grade/', grade_result, name="grade_results"),
url(r'^assessment/$', assessment_result, name="ass_results"), path('assessment/', assessment_result, name="ass_results"),
url(r'^result/print/(?P<id>\d+)/$', result_sheet_pdf_view, name='result_sheet_pdf_view'), path('result/print/<int:id>/', result_sheet_pdf_view, name='result_sheet_pdf_view'),
url(r'^registration/form/$', course_registration_form, name='course_registration_form'), path('registration/form/', course_registration_form, name='course_registration_form'),
] ]

View File

@ -1,8 +1,6 @@
from django.conf.urls import url from django.urls import path
from .views import SearchView from .views import SearchView
urlpatterns = [ urlpatterns = [
url(r'^$', SearchView.as_view(), name='query'), path('', SearchView.as_view(), name='query'),
] ]