django - order_by 基于条件
问题描述
我有一个分配模块的查询集。我想根据自定义条件订购查询集。
我的观点:
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”都有一个completion_status。“AssignmentModule”有一个截止日期 DateTimeField 字段。我想按此顺序订购查询集。未提交且截止日期已过的作业将过期,这些作业应排在第一位。未提交的作业应按截止日期顺序排列,最早的应该在前。UserEnrolment completion_status 为 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)
module 为作业,当完成状态为 2 时,作业已提交,完成状态 None 为作业未提交
解决方案
推荐阅读
- google-cloud-platform - Dataproc 操作失败:INVALID_ARGUMENT:用户无权充当服务帐户
- python - 如何使用python将列标题移动到与excel中特定值对应的行?请参考附件快照
- php - 调用 API 时解析正文出错
- javascript - 找出三个单词的长度
- flutter - 如何从firestore数据库中获取自动生成的ID
- intellij-idea - 如何在社区版的属性文件中使用 IntelliJ 自动完成功能
- r - 在 ggplot2 几何图形中使用 setup_params()
- sql - oracle SQL中如何使用exist进行选择和提取
- html - 图像和居中问题
- react-native - Redux 使用 Native React 错误类型 error: undefined is not an object (evalating '_this.props.counter')