如何在django中安全地更改db对象线程?

时间:2016-03-18 20:29:02

标签: django concurrency django-database

例如,我有一个模型:

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()

怎么做?

1 个答案:

答案 0 :(得分:1)

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