Обновление счетчика с максимальным значением из таблицы с помощью одного запроса

У меня есть поле certification_counter, которое по умолчанию равно 0. Мне нужно увеличить его, получив предыдущее максимальное значение в таблице, но минимальное значение должно быть MIN_CERTIFICATION_COUNTER.

Я написал запрос следующим образом:

last_value_qs = Project.objects.order_by("-certification_counter")
Project.objects.filter(id=project.id).annotate(
      last_counter=Subquery(
           last_value_qs.values("certification_counter")[:1], output_field=IntegerField()
       ),
       max_counter=Greatest(
           F("last_counter"), MIN_CERTIFICATION_COUNTER
       ),
).update(certification_counter=F("max_counter") + 1)

И я получаю:

django.db.utils.OperationalError: (1093, "You can't specify target table 'project' for update in FROM clause")

Я хочу реализовать это как одну транзакцию, чтобы избежать состояния гонки, поэтому я не использовал два запроса, например:

max_value = Project.objects.order_by("-certification_counter").last().certification_counter

Project.objects.filter(id=project.id).update(certification_counter=max(max_value, MIN_CERTIFICATION_COUNTER) + 1 )
Вернуться на верх