所以我正在创建一个django应用程序,允许用户向现有的一组文本行添加新的文本行。但是,我不希望多个用户同时向同一组文本行添加行。所以我创建了一个BoolField isBeingEdited,一旦用户决定附加一个特定的组,就会设置为True。一旦Bool为True,在提交编辑之前没有其他人可以追加该组,于是Bool再次设置为False。工作正常,除非有人决定进行编辑然后改变他们的想法或忘记它等等。我想isBeingEdited在10分钟左右后翻转回False。这是cron的工作,还是有更容易的东西?有什么建议吗?
答案 0 :(得分:4)
将布尔值更改为“锁定时间”
这为您提供了没有Cron的超时,并没有定期点击进入数据库以检查标志并取消设置它们。相反,只有当您对此模型被锁定感兴趣时,才会检查时间。 Cron可能需要检查所有模型。
from django.db import models
from datetime import datetime, timedelta
# Create your models here.
class yourTextLineGroup(models.Model):
# fields go here
lock_time = models.DateTimeField(null=True)
locked_by = models.ForeignKey()#Point me to your user model
def lock(self):
if self.is_locked(): #and code here to see if current user is not locked_by user
#exception / bad return value here
pass
self.lock_time = datetime.now()
def unlock(self):
self.lock_time = None
def is_locked(self):
return self.lock_time and datetime.now() - self.lock_time < timedelta(minutes=10)
上面的代码假定调用者在调用lock或unlock后调用save方法。