Django transaction.commit_on_success-尽管出现错误/异常,提交仍在进行,那么如何调试?
使用Django 1.3和PostgreSQL 9.0,我有一个多步骤的对象创建函数/视图,其中:Django transaction.commit_on_success-尽管出现错误/异常,提交仍在进行,那么如何调试?,django,django-models,transactions,django-orm,Django,Django Models,Transactions,Django Orm,使用Django 1.3和PostgreSQL 9.0,我有一个多步骤的对象创建函数/视图,其中: 创建主对象(尝试了MyModel.objects.create()和手动使用object.save()方法),然后 然后设置m2m关系(它们必须遵循主对象创建,以便所述对象具有要关联的id) 其中一些关系可能会失败,或者可能出现其他问题,因此我需要整个函数以原子方式运行 我尝试过在成功装饰器上使用transaction.commit_包装函数,也尝试过手动使用commit_(并在函数末尾设置提交点
我想现在当你得到一个
IntegrityError
时,你只需要显式调用transaction.rollback()
如果您正在测试包含事务的代码,则需要使用TransactionTestCase而不是TestCase,否则将导致测试看到您描述的行为。@Daniel:不幸的是,这并不容易。如果您知道会干扰事务的事情,请提供建议,谢谢。我发现sqlite的commit_on_成功有时会引入奇怪的行为,并且发现手动commit_无法按预期工作。一定要展示一些受影响的代码,并展示一些错误或测试用例来证明这一点-否则,您将无法在这里得到答案,或者让django开发人员认真对待这一点。谢谢-这看起来至少与我所看到的有关。是的,尽管TestCase
继承自TransactionTestCase
,但是,这打乱了他父母的交易处理。可以说这是一个合理的特性(as),但它违背了Liskov替换原则。当我第一次遇到它时,我发现它与直觉完全相反。