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()
,