feat: allow assigning tasks to specific students or everyone

This commit is contained in:
Dmitry Belan
2026-09-19 15:34:16 +03:00
parent b61f9392a6
commit a5a6e2c037
3 changed files with 7 additions and 3 deletions
+1
View File
@@ -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']
+2
View File
@@ -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)
+4 -3
View File
@@ -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)