Является ли @transaction.atomic дешевым?
Это в основном любопытство, но является ли штраф DB для обертывания всего представления с помощью @transaction.atomic
незначительным?
Я думаю о представлениях, где GET формы или ее повторное отображение после сбоя валидации включает обработку наборов запросов. (ModelChoiceFields, например, или получение объекта, который отображается в шаблоне.)
Мне кажется гораздо более естественным использовать with transaction.atomic()
вокруг блока кода, который фактически изменяет кучу связанных объектов БД только после проверки вводимых пользователем данных.
Я что-то упустил?
Из исходного кода:
def atomic(using=None, savepoint=True, durable=False):
# Bare decorator: @atomic -- although the first argument is called
# `using`, it's actually the function being decorated.
if callable(using):
return Atomic(DEFAULT_DB_ALIAS, savepoint, durable)(using)
# Decorator: @atomic(...) or context manager: with atomic(...): ...
else:
return Atomic(using, savepoint, durable)
Это одно и то же. В обоих случаях функция возвращает объект Atomic
, который обрабатывает, должна ли транзакция зафиксироваться или нет.