是否应该只在Django的视图中使用commit_on_success装饰器?

时间:2012-01-09 19:41:16

标签: django transactions

我正在查看Django网站中commit_on_success装饰器的示例,

https://docs.djangoproject.com/en/dev/topics/db/transactions/

是否应该/在视图中使用它,或者它可以与任何执行数据库事务的函数一起使用?

感谢。

2 个答案:

答案 0 :(得分:3)

在Django 1.6中看到commit_on_success已经deprecated。您应该使用@transaction.atomic装饰器。

答案 1 :(得分:2)

对于不是视图的函数,可以使用commit_on_success。在我的公司,我们在许多实用程序脚本中使用它。

请确保您没有使用事务装饰器“嵌套”函数,如下例所示,否则您可能会得到您不期望的行为。

# avoid doing the following!
@transaction.commit_on_success
def my_func()
    do_stuff()

@transaction.commit_on_success
def my_view()
    my_func()