From a5a6e2c0379707a3be493ae2e2d857bd99e4fed5 Mon Sep 17 00:00:00 2001 From: Dmitry Belan Date: Sat, 19 Sep 2026 15:34:16 +0300 Subject: [PATCH] feat: allow assigning tasks to specific students or everyone --- lmsege/lms/admin.py | 1 + lmsege/lms/models.py | 2 ++ lmsege/lms/views.py | 7 ++++--- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/lmsege/lms/admin.py b/lmsege/lms/admin.py index 1fb0b71..db64af9 100644 --- a/lmsege/lms/admin.py +++ b/lmsege/lms/admin.py @@ -23,6 +23,7 @@ class AssignmentAdmin(ModelAdmin): list_filter = ('subject',) search_fields = ('title', 'description') exclude = ('created_by',) + filter_horizontal = ('assigned_students',) inlines = [QuestionInline] actions = ['delete_selected_assignments'] diff --git a/lmsege/lms/models.py b/lmsege/lms/models.py index afddaf7..d2d9e98 100644 --- a/lmsege/lms/models.py +++ b/lmsege/lms/models.py @@ -17,6 +17,8 @@ class Assignment(models.Model): title = models.CharField('Название задания', max_length=255) description = RichTextUploadingField('Описание задания', blank=True, null=True) subject = models.ForeignKey(Subject, on_delete=models.CASCADE, verbose_name='Предмет') + assign_to_all = models.BooleanField('Назначить всем', default=True, help_text='Если включено, задание будет доступно всем ученикам.') + assigned_students = models.ManyToManyField(settings.AUTH_USER_MODEL, related_name='assigned_assignments', verbose_name='Назначенные ученики', blank=True, limit_choices_to={'role': 'STUDENT'}, help_text='Выберите учеников, если задание не для всех.') created_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, limit_choices_to={'role__in': ['TEACHER', 'ADMIN']}, verbose_name='Кем создано') created_at = models.DateTimeField('Дата создания', auto_now_add=True) diff --git a/lmsege/lms/views.py b/lmsege/lms/views.py index 1e32a9d..958da8e 100644 --- a/lmsege/lms/views.py +++ b/lmsege/lms/views.py @@ -1,4 +1,5 @@ from django.shortcuts import render, get_object_or_404, redirect +from django.db.models import Q from django.contrib.auth.decorators import login_required, user_passes_test from django.utils.html import strip_tags from .models import Assignment, Submission, Answer @@ -34,9 +35,9 @@ def home(request): @login_required @user_passes_test(is_student, login_url='/login/') def dashboard(request): - # Fetch assignments (could be all, or specific to student's classes) - # For now, let's fetch all assignments. - assignments = Assignment.objects.all().order_by('-created_at') + assignments = Assignment.objects.filter( + Q(assign_to_all=True) | Q(assigned_students=request.user) + ).distinct().order_by('-created_at') # Check which ones the student has submitted submissions = Submission.objects.filter(student=request.user)