Ok, creo que he descubierto esto. El problema radica en un problema de larga data con Django y Psycopg2. Básicamente, Psycopg2 emitirá automáticamente una instrucción BEGIN a la base de datos. Sin embargo, si Django cree que no se ha producido ninguna modificación de datos, no emitirá un COMMIT al final de una transacción.
Hay algunas soluciones a este problema, consulte http://www. slideshare.net/OReillyOSCON/unbreaking-your-django-application para más detalles. Idealmente, desactive las confirmaciones automáticas (configurando autocommit =True en la configuración de su base de datos, convención de nomenclatura incómoda). Esto evita transacciones en funciones de solo lectura, pero también en funciones de escritura, por lo que debe envolver manualmente esas funciones en un decorador @commit_on_success.
Alternativamente, simplemente agregue django.middleware.transaction.TransactionMiddleware a sus clases de Middleware. Esto envolverá cada solicitud en una transacción. Esto significa también envolver innecesariamente solicitudes de solo lectura en una transacción, pero es una solución rápida y sucia.