select_for_update是在第一个save()还是在视图结尾处释放锁定?

Kit*_*nde 8 django-orm

我有类似的东西:

newsletter = Newsletter.select_for_update().latest()
newsletter.started_sending = timezone.now()
newsletter.save()

newsletter.send()
Run Code Online (Sandbox Code Playgroud)

然后它遇到了一个竞争条件,我发送重复,大概是因为send()被两个cron作业击中.这导致我认为锁是在第一次保存时释放的,我认为它在视图结束之前不会释放.

它是在第一次保存时发布的,对吗?

Kit*_*nde 10

来自https://docs.djangoproject.com/en/dev/topics/db/transactions/#topics-db-transactions-requirements

Django的默认事务行为

Django的默认行为是使用open事务运行,当调用任何内置的数据更改模型函数时,它会自动提交.例如,如果调用model.save()或model.delete(),则会立即提交更改.

  • 我想原来问题的答案是“是”? (3认同)
  • @ mh512是的:). (2认同)