Хорошо, я думаю, что понял это.Проблема заключается в давней проблеме с Django и Psycopg2.По сути, Psycopg2 автоматически выдаст инструкцию BEGIN для БД.Однако, если Django считает, что изменение данных не произошло, он не выдаст COMMIT в конце транзакции.
Существует несколько решений этой проблемы, см. http://www.slideshare.net/OReillyOSCON/unbreaking-your-django-applicationбольше деталей.В идеале вы должны отключить автоматическую фиксацию (установив autocommit = True в настройках БД, неудобное соглашение об именах).Это предотвращает транзакции для функций только для чтения, но также и для функций записи, поэтому вам нужно вручную обернуть эти функции в декораторе @commit_on_success.
В качестве альтернативы просто добавьте django.middleware.transaction.TransactionMiddleware в ваши классы Middleware.,Это обернет каждый запрос в транзакции.Это также означает, что в транзакции излишне оборачиваются запросы, доступные только для чтения, но это быстрое и грязное решение.