将Django 1.3与PostgreSQL 9.0一起使用,我有一个多步骤对象创建功能/视图,其中:
这些关系中的一些可能会失败,或者可能出现其他一些问题,因此我需要整个函数以原子方式运行。
我尝试使用transaction.commit_on_success装饰器包装函数,并尝试使用commit_manually(并在函数末尾设置提交点);但都不起作用。也就是说,即使稍后在函数中引发异常,也会创建主对象并将其保存在数据库中。这使数据库处于不一致的状态,以礼貌地说。那么,如何调试呢?我见过类似的问题,但它们与使用MySQL有关,而这种破坏的交易不应该发生在Postgres上。几年前有关于这个问题的Django Trac门票,但他们应该被修复/解决了。请问任何Djangonauts都能提供启发吗?
答案 0 :(得分:1)
查看此票证:https://code.djangoproject.com/ticket/6669
我认为现在您只需要在获得transaction.rollback()
时明确致电IntegrityError
答案 1 :(得分:1)
我不知道这是否适用于你,但是带给我的问题是没有阅读关于Django测试的手册。
如果您正在测试包含事务的代码,则需要使用TransactionTestCase而不是TestCase,否则将导致测试看到您描述的行为。