This commit is contained in:
Dmitriy
2025-06-23 01:24:34 +03:00
commit 60b4e0e839
303 changed files with 35737 additions and 0 deletions

113
schedule/views.py Normal file
View File

@ -0,0 +1,113 @@
from django.shortcuts import render, redirect, get_object_or_404
from django.contrib.auth.decorators import login_required
from django.contrib import messages
from .models import Course, Lesson, LessonEnrollment
from .forms import LessonForm, EnrollmentForm
def schedule_list(request):
lessons = Lesson.objects.all().order_by('date', 'start_time')
return render(request, 'schedule/schedule_list.html', {'lessons': lessons})
@login_required
def course_detail(request, pk):
course = get_object_or_404(Course, pk=pk)
lessons = Lesson.objects.filter(course=course).order_by('start_time')
return render(request, 'schedule/course_detail.html', {
'course': course,
'lessons': lessons
})
@login_required
def lesson_detail(request, pk):
lesson = get_object_or_404(Lesson, pk=pk)
return render(request, 'schedule/lesson_detail.html', {'lesson': lesson})
@login_required
def create_lesson(request):
if not hasattr(request.user, 'instructor'):
messages.error(request, 'У вас нет прав для создания занятий.')
return redirect('schedule:list')
if request.method == 'POST':
form = LessonForm(request.POST)
if form.is_valid():
lesson = form.save(commit=False)
lesson.instructor = request.user.instructor
lesson.save()
messages.success(request, 'Занятие успешно создано.')
return redirect('schedule:list')
else:
form = LessonForm()
return render(request, 'schedule/lesson_form.html', {'form': form, 'action': 'create'})
@login_required
def update_lesson(request, pk):
lesson = get_object_or_404(Lesson, pk=pk)
if not hasattr(request.user, 'instructor') or lesson.instructor != request.user.instructor:
messages.error(request, 'У вас нет прав для редактирования этого занятия.')
return redirect('schedule:list')
if request.method == 'POST':
form = LessonForm(request.POST, instance=lesson)
if form.is_valid():
form.save()
messages.success(request, 'Занятие успешно обновлено.')
return redirect('schedule:list')
else:
form = LessonForm(instance=lesson)
return render(request, 'schedule/lesson_form.html', {'form': form, 'action': 'update'})
@login_required
def delete_lesson(request, pk):
lesson = get_object_or_404(Lesson, pk=pk)
if not hasattr(request.user, 'instructor') or lesson.instructor != request.user.instructor:
messages.error(request, 'У вас нет прав для удаления этого занятия.')
return redirect('schedule:list')
if request.method == 'POST':
lesson.delete()
messages.success(request, 'Занятие успешно удалено.')
return redirect('schedule:list')
return render(request, 'schedule/lesson_confirm_delete.html', {'lesson': lesson})
@login_required
def enroll_lesson(request, pk):
lesson = get_object_or_404(Lesson, pk=pk)
if not hasattr(request.user, 'student'):
messages.error(request, 'Только студенты могут записываться на занятия.')
return redirect('schedule:list')
if lesson.enrolled_students.count() >= lesson.max_students:
messages.error(request, 'К сожалению, все места на это занятие уже заняты.')
return redirect('schedule:list')
if request.user.student in lesson.enrolled_students.all():
messages.warning(request, 'Вы уже записаны на это занятие.')
else:
lesson.enrolled_students.add(request.user.student)
messages.success(request, 'Вы успешно записались на занятие.')
return redirect('schedule:detail', pk=pk)
@login_required
def enrollment_detail(request, pk):
enrollment = get_object_or_404(LessonEnrollment, pk=pk)
return render(request, 'schedule/enrollment_detail.html', {'enrollment': enrollment})
@login_required
def enrollment_create(request):
if request.method == 'POST':
form = EnrollmentForm(request.POST)
if form.is_valid():
enrollment = form.save()
messages.success(request, 'Запись на занятие успешно создана!')
return redirect('enrollment_detail', pk=enrollment.pk)
else:
form = EnrollmentForm()
return render(request, 'schedule/enrollment_form.html', {'form': form})