django db пишет, что это не происходит сразу при запуске на сайте администратора

У меня есть такой фрагмент кода в приложении 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() - в вызове без прав администратора база данных обновляется, когда я проверяю во время этой точки останова. Только после того, как я позволю приложению работать своим чередом, БД обновится.

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

Обновить

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


person Krystian Cybulski    schedule 14.06.2009    source источник


Ответы (1)


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

person Krystian Cybulski    schedule 14.06.2009
comment
Хорошо нашел, запомню :) - person Rob Golding; 14.06.2009