假设我有这段代码:
product = Product.objects.get(name='something')
product.number_sold += 1
product.save()
如果在查询期间number_sold为10,然后在save()之前,此代码同时运行,那么查询将再次返回10,这意味着它将保存number_sold = 11两次? 换句话说,运行此django视图的两个用户可以获得number_sold字段的相同值吗?
答案 0 :(得分:4)
为了避免多线程/流程代码中的竞争条件,您应该使用F()-expressions
:
from django.db.models import F
product = Product.objects.get(name='something')
product.number_sold = F('number_sold') + 1
product.save()
答案 1 :(得分:3)
您可以在一个查询中执行此操作:
Product.objects.filter(name='something').update(number_sold=F('number_sold')+1)