Python transaction.atomic是否也包含被调用的函数?

Python transaction.atomic是否也包含被调用的函数?,python,django,Python,Django,我正在使用Django/cellery,我想知道我的create函数中的transaction.atomic是否也包含被调用的函数(createUserTenant) 这是一个示例(如您所见,我正在调用createUserTenant,其中包含一些查询): 如你所见,我这里有一些交易 @shared_task def createUserTenant(userid, current_schema): state = True try: with schema_co

我正在使用Django/cellery,我想知道我的create函数中的
transaction.atomic
是否也包含被调用的函数(
createUserTenant

这是一个示例(如您所见,我正在调用
createUserTenant
,其中包含一些查询):

如你所见,我这里有一些交易

@shared_task
def createUserTenant(userid, current_schema):
    state = True
    try:
        with schema_context(current_schema):
            addUserInTeam = Team.objects.create(user = CustomUser.objects.get(pk=userid))

        with schema_context('public'):
            userInQuestion = CustomUser.objects.get(id=userid)
            # create your first real tenant
            tenant = Client(
                schema_name=str(userInQuestion.username),
                name=userInQuestion.first_name + '_' + userInQuestion.last_name,
                paid_until='2014-12-05',
                on_trial=True)
            tenant.save() 
            # migrate_schemas automatically called, your tenant is ready to be used!
            # Add one or more domains for the tenant
            domain = Domain()
            domain.domain =  str(userInQuestion.username) + settings.BASE_URL # tx.domain.com
            domain.tenant = tenant
            domain.is_primary = False
            domain.save()
    except:
        state = False
    
    return state

否,装饰器仅将函数
create
包装在事务块中,并且还可以嵌套事务。事务块不会在事务中自动包装父块。您需要在任务中创建事务,以确保
create
之外的代码正在事务中运行

详情如下:

一种方法是:

from django.db import transaction
@shared_task
def createUserTenant(userid, current_schema):
    with transaction.atomic():
       # your code
       # ....
from django.db import transaction
@shared_task
def createUserTenant(userid, current_schema):
    with transaction.atomic():
       # your code
       # ....