我有一个如下所示的管理操作:
def process(modeladmin, request, queryset):
for reservation in queryset:
if not reservation.processed:
reservation.processed = True
reservation.save()
item = reservation.item
item.available = F('available') - reservation.quantity
item.save()
因此,管理员可以处理reservation一个item. 每当他这样做时,都会将reservation其标记为已处理,并且可用items数量会减少 中指定的数量reservation。
正如所有管理员操作都会发生的那样,管理员可以reservations一次处理多个操作。reservations如果一切都不同,一切都会顺利items。但是如果两个reservations共享一个item,可用的数量items只会减少最后reservation处理中指定的数量。
我认为F()表达式仅适用于这种情况:我想进行许多更改item并让它们增加或减少属性,item而不会遇到竞争条件。我错过了什么?