Django更新并保存异步?

时间:2018-06-30 07:15:58

标签: django django-models

我们有一个仅允许其实例为active的模型:

class MyModel(models.Model):
   active = models.BooleanField()

   def save(self, *args, **kwargs):
       if self.active:
           MyModel.objects.update(active=False)
       super(MyModel, self).save(*args, **kwargs)

这似乎可行,并通过简单的测试以确保只有一个实例处于活动状态。

但是,它最近已在我们的生产服务器上使用,并且似乎在保存后update调用正在执行 ,因此所有实例都以{{1 }}-并非一直如此。

保存后,更新是否正在运行?还是我需要在其他地方寻找该问题?

1 个答案:

答案 0 :(得分:1)

  

Django更新并保存异步吗?

否,Django的updatesave不是异步的。

  

保存后,更新是否正在运行?

是的,有可能。

我怀疑正在发生的事情是,当Django告诉您的数据库执行更新时,您的数据库会立即告诉Django在后台执行更新时发生了更新

因此,由于Django代码已从数据库获得响应,因此它继续执行下一条语句。

  

还是我需要在其他地方寻找该问题?

是的。也许在数据库的SO标签或邮件列表下问这个问题。我可以想到的一个简单修复方法是在更新进行时显式锁定表。尽管我不确定什么是最好的方法,因为我没有太多使用数据库的经验。