django 批量使用 同一个表的字段做转换
使用结束减去开始时间
- 批量更新已经超时的记录
ExamRecord.objects.filter(
over_time__lt=datetime.datetime.now(), submit=1
).update(
submit=3,
use_time=ExpressionWrapper(
Extract(F('over_time') - F('start_time'), 'epoch') / 60,
output_field=IntegerField()
)
)
利用子查询 关联到另一个表 批量更新
- 答案表的如果题目正确 则另外一个获取分数
ExamRecordAnswer.objects.filter(
exam_record__submit__gt=1,
score=0.00,
exam_paper_question__question__answer=F('answer'),
).annotate(
ok_score=Subquery(
ExamPaperQuestion.objects.filter(
uuid=OuterRef('exam_paper_question_id')
).values(
'score'
)[:1],
output_field=DecimalField(max_digits=5, decimal_places=2)
)
).update(
is_ok=True,
score=F('ok_score')
)
利用子查询 汇总另外一个表
- 计算分数并汇总分数
ExamRecord.objects.filter(
answer_exam_record__is_ok=True,
submit__gt=1,
score=0.00
).update(
score=Subquery(
ExamRecordAnswer.objects.filter(
exam_record_id=OuterRef('uuid'),
is_ok=True
).values(
'exam_record_id'
).annotate(
total_score=Sum('score')
).values(
'total_score'
)[:1]
)
)
本文来自博客园,作者:vx_guanchaoguo0,转载请注明原文链接:https://www.cnblogs.com/guanchaoguo/p/17565086.html