TransactionManagementError в тесте модели django

В django 1.6 я пытаюсь протестировать уникальное поле.

# model tag
class Tag(models.Model):
    name = models.CharField(max_length=30, unique=True, null=True)

    def __unicode__(self):
        return self.name


# test unique of name field
class TagTest(TestCase):

    def test_tag_unique(self):
        t1 = Tag(name='music')
        t1.save()

        with self.assertRaises(IntegrityError):                                                                                                                    
          t2 = Tag(name='music')
          t2.save()

        self.assertEqual(['music'], [ t.name for t in Tag.objects.all() ])

с последней строки я получаю это сообщение

    "An error occurred in the current transaction. You can't "
TransactionManagementError: An error occurred in the current transaction. You can't execute queries until the end of the 'atomic' block.

Зачем?

РЕДАКТИРОВАТЬ

Я получаю это с sqlite как БД (Среда разработки).

1 ответ

Если вы используете PostgreSQL, вот почему.

Редактировать:

Смотрите этот коммит. Поскольку он находится в базовом бэкэнде, кажется, что все бэкэнды теперь имеют общее поведение. Несмотря на используемый бэкэнд, если транзакция требует отката, возникает ошибка.

Совет:

использование Model.objects.create(attr="value") вместо создания и .save(),

Другие вопросы по тегам