我有一个简单模型的Django应用程序:
class ThingToPick(models.Model):
title = models.CharField(max_length=200)
start_date = models.DateTimeField('date published', auto_now=True)
status = models.IntegerField(default=0)
filedata = models.TextField()
我有一些观点:
exec_item = ThingToRun.objects.filter(status=0).order_by('start_date')[0]
exec_item.status = 1
exec_item.save()
我需要一些方法从一个且只有一个并发用户中选择每个ThingToRun
。我知道这已经破了,我该怎么办呢?
答案 0 :(得分:1)
你真正想要做的不仅仅是挑选一些东西,而是选择一些东西并将其标记为正在处理中,以便在此期间没有其他人选择它。所以你想要的方法是select_for_update
:
exec_item = ThingToRun.objects.select_for_update().filter(status=0).order_by('start_date')[0]
exec_item.status = 1
exec_item.save()
...process exec_item ....