次のような管理アクションがあります。
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
ます。ただし、2 人reservations
が 1 人を共有しitem
ている場合、使用可能な数はitems
、最後に処理された量で指定された分だけ減少しreservation
ます。
F()
式はまさにこのケースのためのものだと思いました: 競合状態に陥ることなく、多くの変更を行い、属性を増減させたいのですitem
。item
私は何が欠けていますか?