如何在 Django 中安全地更改数据库对象线程?

How to change db objects thread safely in django?

比如我有一个模型:

class Model1(models.Model):
   is_free = models.BooleanField(default=True)
   rel_object = models.ForeignKey(Model2, null=True, default=None)

有些对象设置为"free"。我想获取第一个并将其设置为 "not free" 线程安全(我需要保证其他线程不能同时更改此对象):

model1 = Model1.objects.filter(is_free=True).first()
model1.is_free = False
model2.rel_object = model2
model2.save()

怎么做?

您可能对 select_for_update 感兴趣。这使您能够锁定该行,直到事务被提交。