feat: add is_published flag to assignments
This commit is contained in:
+13
-3
@@ -18,14 +18,24 @@ class QuestionInline(StackedInline):
|
|||||||
|
|
||||||
@admin.register(Assignment)
|
@admin.register(Assignment)
|
||||||
class AssignmentAdmin(ModelAdmin):
|
class AssignmentAdmin(ModelAdmin):
|
||||||
list_display = ('title', 'subject', 'created_at')
|
list_display = ('title', 'subject', 'is_published', 'created_at')
|
||||||
list_display_links = ('title',)
|
list_display_links = ('title',)
|
||||||
list_filter = ('subject',)
|
list_filter = ('subject', 'is_published')
|
||||||
search_fields = ('title', 'description')
|
search_fields = ('title', 'description')
|
||||||
exclude = ('created_by',)
|
exclude = ('created_by',)
|
||||||
filter_horizontal = ('assigned_students',)
|
filter_horizontal = ('assigned_students',)
|
||||||
inlines = [QuestionInline]
|
inlines = [QuestionInline]
|
||||||
actions = ['delete_selected_assignments']
|
actions = ['make_published', 'make_unpublished', 'delete_selected_assignments']
|
||||||
|
|
||||||
|
@admin.action(description="Опубликовать выбранные задания")
|
||||||
|
def make_published(self, request, queryset):
|
||||||
|
updated = queryset.update(is_published=True)
|
||||||
|
self.message_user(request, f"Опубликовано {updated} заданий.")
|
||||||
|
|
||||||
|
@admin.action(description="Скрыть выбранные задания (в черновик)")
|
||||||
|
def make_unpublished(self, request, queryset):
|
||||||
|
updated = queryset.update(is_published=False)
|
||||||
|
self.message_user(request, f"Скрыто {updated} заданий.")
|
||||||
|
|
||||||
@admin.action(description="Удалить выбранные задания")
|
@admin.action(description="Удалить выбранные задания")
|
||||||
def delete_selected_assignments(self, request, queryset):
|
def delete_selected_assignments(self, request, queryset):
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ class Assignment(models.Model):
|
|||||||
title = models.CharField('Название задания', max_length=255)
|
title = models.CharField('Название задания', max_length=255)
|
||||||
description = RichTextUploadingField('Описание задания', blank=True, null=True)
|
description = RichTextUploadingField('Описание задания', blank=True, null=True)
|
||||||
subject = models.ForeignKey(Subject, on_delete=models.CASCADE, verbose_name='Предмет')
|
subject = models.ForeignKey(Subject, on_delete=models.CASCADE, verbose_name='Предмет')
|
||||||
|
is_published = models.BooleanField('Опубликовано', default=True, help_text='Снимите галочку, чтобы скрыть задание (как черновик).')
|
||||||
assign_to_all = models.BooleanField('Назначить всем', default=True, help_text='Если включено, задание будет доступно всем ученикам.')
|
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='Выберите учеников, если задание не для всех.')
|
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_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, limit_choices_to={'role__in': ['TEACHER', 'ADMIN']}, verbose_name='Кем создано')
|
||||||
|
|||||||
+3
-2
@@ -36,7 +36,8 @@ def home(request):
|
|||||||
@user_passes_test(is_student, login_url='/login/')
|
@user_passes_test(is_student, login_url='/login/')
|
||||||
def dashboard(request):
|
def dashboard(request):
|
||||||
assignments = Assignment.objects.filter(
|
assignments = Assignment.objects.filter(
|
||||||
Q(assign_to_all=True) | Q(assigned_students=request.user)
|
Q(assign_to_all=True) | Q(assigned_students=request.user),
|
||||||
|
is_published=True
|
||||||
).distinct().order_by('-created_at')
|
).distinct().order_by('-created_at')
|
||||||
|
|
||||||
# Check which ones the student has submitted
|
# Check which ones the student has submitted
|
||||||
@@ -52,7 +53,7 @@ def dashboard(request):
|
|||||||
@login_required
|
@login_required
|
||||||
@user_passes_test(is_student, login_url='/login/')
|
@user_passes_test(is_student, login_url='/login/')
|
||||||
def assignment_detail(request, pk):
|
def assignment_detail(request, pk):
|
||||||
assignment = get_object_or_404(Assignment, pk=pk)
|
assignment = get_object_or_404(Assignment, pk=pk, is_published=True)
|
||||||
questions = assignment.questions.all()
|
questions = assignment.questions.all()
|
||||||
|
|
||||||
# Try to get existing submission
|
# Try to get existing submission
|
||||||
|
|||||||
Reference in New Issue
Block a user