Pelo que diz na documentação do django, é só ativar o middleware que funciona:
```
Binds commit and rollback of the default database to the request/response phase. If a view function runs successfully, a commit is done. If it fails with an exception, a rollback is done.
```
https://docs.djangoproject.com/en/1.4/ref/middleware/#django.middleware.transaction.TransactionMiddleware

E também aqui:
```
The recommended way to handle transactions in Web requests is to tie them to the request and response phases via Django’s TransactionMiddleware.

It works like this: When a request starts, Django starts a transaction. If the response is produced without problems, Django commits any pending transactions. If the view function produces an exception, Django rolls back any pending transactions.

To activate this feature, just add the TransactionMiddleware middleware to your MIDDLEWARE_CLASSES setting:
```
https://docs.djangoproject.com/en/1.4/topics/db/transactions/#tying-transactions-to-http-requests