У меня есть набор запросов модулей присваивания. Я хочу упорядочить набор запросов на основе пользовательских условий.
Мое представление:
class ListAssignmentsAsStudent(generics.ListAPIView):
serializer_class = AssignmentModuleSerializer
def get_queryset(self):
my_enrolments = UserEnrolment.objects.filter(
user=self.request.user).values_list('enrolment')
my_enrolment_enrollables = Enrollable.objects.filter(
enrolment__in=my_enrolments)
assignment_modules = []
for enrollable in my_enrolment_enrollables:
assignment_modules.extend(enrollable.course_share_item.modules.instance_of(
AssignmentModule))
return assignment_modules
Все «UserEnrolment» имеют статус завершения. «AssignmentModule» имеют поле даты выполнения DateTimeField. Я хочу упорядочить набор запросов в этом порядке. Задания, которые не были отправлены и срок выполнения уже истек, будут просрочены, и они должны быть выполнены раньше. Непредставленные задания должны поступать в порядке сроков выполнения, более раннее должно быть первым. Присваивания со статусом завершения UserEnrolment в качестве COMPLETED должны иметь наименьший приоритет. Они будут последними в списке. После заказа задания будут именно в таком порядке.
Overdue>not submitted with due dates earliest first> submitted assignments
Прогресс AssignmentModule поддерживается в модели:
class ModuleProgress(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
user = models.ForeignKey(
ElsUser, on_delete=models.CASCADE, default=None, null=False, blank=False)
module = models.ForeignKey(
Module, on_delete=models.CASCADE, default=None, null=False, blank=False)
completion_status = models.IntegerField(
default=None, null=True, blank=True)
progress_percentage = models.IntegerField(
default=0, null=False, blank=True)
notes = models.ManyToManyField(ModuleProgressNote)
модуль является назначением, и когда статус завершения равен 2, задание отправлено, состояние завершения Нет - задание не отправлено