Django: select_for_update () по отношению к внешнему ключу - PullRequest
0 голосов
/ 05 июля 2018

Я много использовал 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? Я понимаю, что с точки зрения производительности оба варианта примерно одинаковы. Просто ищу что-то немного чище. Спасибо!

...