次のような管理アクションがあります。
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私は何が欠けていますか?