Я думаю, что ответ Майка ДеСимона - правильный.
Что касается базы данных, в зависимости от используемой вами версии MySQL (если вы ее используете), возможно, что таблицы вашей базы данных используют движок MyISAM, что делаетне поддерживает транзакции.
Чтобы проверить это, просто запустите в оболочке mysql:
SELECT TABLE_NAME,
ENGINE
FROM information_schema.TABLES
where TABLE_SCHEMA = 'your_db_name' ;
Вы можете изменить свои таблицы на InnoDB и установить default_storage_engine на innodb в конфигурации MySQL.(Подробности здесь: http://parasjain.net/2010/06/08/how-to-switch-to-innodb-database-in-mysql/.
После этого транзакции должны работать. Лучше использовать Postgres, но если вы хотите использовать MySQL / InnoDB, то, вероятно, вам понадобится обходной путь для загрузки приборов с прямыми ссылками(BugFix уже присутствует в Django Trunk, и я также перенес его в Django 1.3.1, см. Django 1.3.1.1 на Github ).