Django TestCase não usa transações no banco de dados secundário

Eu estou usando o Django 1.3.1. Eu tenho dois bancos de dados, alguns dos meus modelos vivem em um banco de dados, alguns no outro. Ambos os bancos de dados são bancos de dados contrib.gis.db.backends.postgis.

Para minha surpresa, o TestCase do Django não está revertendo as mudanças que fiz no banco de dados secundário entre os testes.

No código a seguir, myproject.models.WellOwner é um modelo muito simples que basicamente possui apenas um campo "name". O roteador diz que deve estar no banco de dados secundário. A afirmação no primeiro teste é bem-sucedida, o segundo teste falha:

<code>from django.test import TestCase
from myproject.models import WellOwner

class SimpleTest(TestCase):
    def test1(self):
        WellOwner.objects.create(name="Remco")
        self.assertEquals(1, WellOwner.objects.count())  # Succeeds

class SimpleTest2(TestCase):
    def test2(self):
        # I would expect to have an empty database at this point
        self.assertEquals(0, WellOwner.objects.count())  # Fails!
</code>

Eu suponho que o Django envolve isso em uma transação no banco de dados padrão, mas não no banco de dados secundário. É um problema conhecido? Existe uma correção? Em 1.4 talvez? Meu Google-fu está falhando.

(se eu mudar DATABASE_ROUTERS para [] nas configurações para que tudo vá para o mesmo banco de dados, o problema desaparece)

Eu adicionarei o código inteiro do roteador, caso isso ajude:

<code>SECONDARY_MODELS = ('WellOwner', ...)

import logging
logger = logging.getLogger(__name__)


class GmdbRouter(object):
    """Keep some models in a secondary database."""

    def db_for_read(self, model, **hints):
        if model._meta.app_label == 'gmdb':
            if model._meta.object_name in SECONDARY_MODELS:
                return 'secondary'

        return None

    def db_for_write(self, model, **hints):
        # Same criteria as for reading
        return self.db_for_read(model, **hints)

    def allow_syncdb(self, db, model):
        if db == 'secondary':
            if model._meta.app_label in ('sites', 'south'):
                # Hack for bug https://code.djangoproject.com/ticket/16353
                # When testing, create django_site and south in both databases
                return True

            return self.db_for_read(model) == 'secondary'
        else:
            # Some other db
            if model._meta.app_label == 'gmdb':
                # Our models go in the other db if they don't go into secondary
                return self.db_for_read(model) != 'secondary'

            # Some other model in some other db, no opinion
            return None
</code>

questionAnswers(1)

yourAnswerToTheQuestion