django db пишет не происходит сразу при запуске на сайте администратора - PullRequest
2 голосов
/ 14 июня 2009

У меня есть такой фрагмент кода в приложении Django

def update_account(user_account,add_widget_count):
    user_account.add_widgets(add_widget_count)
    user_account.save()

    notify_other_system_about_account_update(user_account)

Когда я запускаю это как часть моего приложения, все отлично работает. В частности, когда моя другая система (внешняя по отношению к django) получает уведомление, она проверяет базу данных и обновляет количество виджетов.

Однако, когда я запускаю приведенный выше код с веб-сайта администратора, возникает проблема. Когда моя другая система получает уведомление, она не видит обновленное значение в базе данных. Я подтверждаю, помещая точку останова и проверяя ее в базе данных, и она не обновляется после вызова .save () - при вызове не-admin-site база данных обновляется, когда я проверяю во время этой точки останова. Обновление БД происходит только после того, как приложение запущено.

Промежуточное программное обеспечение администратора django выполняет некоторую задержку или отсрочку записи в БД?

Обновление

Я даже переместил вызов на notify_other_system_about_account_update(user_account) в обработчик сигнала post_save на моем объекте UserAccount. Сигнал срабатывает, но когда я его получаю. База данных обновляется в какой-то момент после того, как мой обработчик сигнала возвращается. Такое поведение происходит только при запуске изнутри сайта администратора.

1 Ответ

4 голосов
/ 14 июня 2009

Я нашел проблему. Администратор django использует транзакции БД для всего представления. Мне нужно вручную зафиксировать транзакцию перед уведомлением внешней системы

...