一次更新数据并再次使用更新数据的功能

时间:2019-08-18 18:23:46

标签: python django

我正在使用一个功能来检查谁提交了作业,并为那些没有提交作业的人计算罚款。尽管它可以很好地保存在未提交作业的db中,但是罚款会发生问题。可以使用相同的功能(在检查了谁上交后立即执行),但使用的是旧数据。它不会获取更新的数据(如果未提交,则为+1)。我认为这是因为一次完成一项功能,一次完成一次更新和计算。但是我不知道如何分离它们或正确获取更新的数据。

我在原始函数之外制作了一个函数,该函数仅计算罚款并应用于原始函数,目的是分离两个函数(检查提交和计算罚金),但结果却相同。

def group_update(request, group_id):
group = get_object_or_404(Group, id=group_id)
memberships = Membership.objects.filter(group=group)
members = [x.person for x in memberships]

检查提交

assignments = Assignment.objects.filter(done_checked=False, group=group, due_date__lte=datetime.now())
for assignment in assignments:
    submission = Done.objects.filter(assignment=assignment)
    submitters = [x.author for x in submission]
    assignment.done_checked = True
    assignment.save(update_fields=['done_checked'])
    for member in members:
        if member not in submitters:
            non_submit = memberships.get(person=member)
            non_submit.noshow_assign = non_submit.noshow_assign + 1
            non_submit.save()

计算罚款

for membership in memberships:
    membership.penalty = membership.noshow_assign * group.penalty
    membership.save(update_fields=['penalty'])

return redirect(resolve_url('study:group_detail', group.id))

检查提交是否正常。 (数据已正确保存)所以我认为使用罚款函数更新的数据也可以计算惩罚,但事实并非如此。数据是正确的,但事实是后面的函数无法获取更新的数据T.T

1 个答案:

答案 0 :(得分:0)

您可以尝试此解决方案useRef