2

所以这不一定是一个 Django 问题,我只是在思考逻辑方面有一个心理障碍,但我想 Django 可能会提供一些手动锁定记录的方法,这会很有帮助。

本质上,用户可以一次上传一个或多个文件。每个文件都通过单独的请求上传。当用户超过 90% 的存储配额时,我想向他们发送一封电子邮件,通知他们,但我只想发送一封电子邮件。所以我目前的工作流程是检查他们的使用情况,确保他们还没有收到提醒,并且:

if usage_pct >= settings.VDISK_HIGH_USAGE_THRESHOLD and disk.last_high_usage_reminder is None:
    disk.last_high_usage_reminder = timezone.now()
    disk.save()
    vdisks_high_usage_send_notice(user)

然而,上面的代码通常允许不止一封电子邮件通过。所以我的第一个想法是在检查值之前以某种方式锁定磁盘记录,然后在保存后解锁它。是否可能和/或可取,或者有更好的方法吗?

4

1 回答 1

0

好的,我很自信我已经用这个答案解决了这个问题:https ://stackoverflow.com/a/7794220/698289

首先,实现这个效用函数:

@transaction.commit_manually
def flush_transaction():
    transaction.commit()

然后修改我的原始代码以刷新并重新加载磁盘记录:

flush_transaction()
disk = user.profile.diskstorage
if usage_pct >= settings.VDISK_HIGH_USAGE_THRESHOLD and disk.last_high_usage_reminder is None:
    disk.last_high_usage_reminder = timezone.now()
    disk.save()
    vdisks_high_usage_send_notice(user)
于 2013-05-29T07:00:23.490 回答