Я много использовал select_for_update (). Тем не менее, во всех случаях, которые я использовал, это было через менеджера, например, так:
with transaction.atomic():
transaction = Transaction.objects.select_for_update().get(id="12345-6789-10")
transaction.status = StatusEnum.APPROVED
transaction.save()
Однако иногда я получаю транзакцию по ссылке из другого объекта.
Например:
transaction = another_object.transaction
transaction.status=StatusEnum.APPROVED
transaction.save()
^^ Это не заблокирует строку. Вместо этого я должен был бы сделать это:
transaction = Transaction.objects.select_for_update().get(id=another_object.transaction.id)
Мой вопрос: если другой объект имеет отношение внешнего ключа к Транзакции, есть ли способ заблокировать объект Транзакции без написания запроса get? Я понимаю, что с точки зрения производительности оба варианта примерно одинаковы. Просто ищу что-то немного чище. Спасибо!