Django откладывает save () графа объектов модели / транзакционно создает модели - PullRequest
1 голос
/ 03 августа 2011

Я создаю группу объектов модели, которые ссылаются друг на друга, например:

link = DirectorsIndividual(company = co,
                           individual = individual,
                           director = officer)

Где co, individual и officer - несохраненные объекты модели.Поскольку они не сохранены, у них еще нет идентификаторов, поэтому сохранение link приведет к ошибке.

Я хочу либо создать и сохранить все мои объекты, либо ни один из них.Есть ли стандартный шаблон для этого?

Я делаю это, потому что меня волнует «транзакционность»;минимизация доступа к базе данных, очевидно, также хороша, но не является основной целью.

1 Ответ

2 голосов
/ 04 августа 2011

Используйте декоратор commit_manually , если вам нужен полный контроль над транзакциями.Он сообщает Django, что вы будете управлять транзакцией самостоятельно.

Если ваше представление изменяет данные и не выполняет commit () или rollback (), Django вызовет исключение TransactionManagementError.

Ручное управление транзакциями выглядит так:

from django.db import transaction

@transaction.commit_manually
def viewfunc(request):
    ...
    # You can commit/rollback however and whenever you want
    transaction.commit()
    ...

    # But you've got to remember to do it yourself!
    try:
        ...
    except:
        transaction.rollback()
    else:
        transaction.commit()
...