除非在调试器中运行,否则忽略语句

时间:2015-12-04 17:06:23

标签: python django

我正在使用django-tenant-schemas,并且正在尝试为我的公共租户下的所有租户建立一个管理面板。

但是以下视图未正确执行:

@login_required
def users(request, tenant_pk):
    tenant = get_tenant_model().objects.get(pk=tenant_pk)
    with tenant_context(tenant):
        users = User.objects.all().order_by('username')
        context = {'tenant':tenant, 'users':users}
    return render_to_response('tenant_management/users.html', context, context_instance=RequestContext(request))

所需的结果是它将根据url参数检索租户,并为我提供属于该架构的所有用户的列表。租户被正确检索,但不是向我显示该模式中的用户,而是向我显示公共模式中的用户。

现在变得奇怪的是,如果我在with语句之后插入一个断点或者在我的调试器中执行整个函数,那么它会按预期完美地工作。

以下是结果图:

Expected Results: Only shows when debugger is run 这是预期的结果。它可以正确显示所有3个指定租户的用户。只有在调试器通过'运行时才会发生这种情况。言。

Unexpected Results: Displays Public schema users 如果我在没有调试器的情况下运行代码,或者如果我让调试器在'之前继续运行,那么这就是结果。声明。

以下是调试时我的即时窗口的输出:

# Debugging before the with statement
> tenant = get_tenant_model().objects.get(pk=1)
> tenant
<Tenant: Public>
> User.objects.all()
[<User: d>]
# While debugging after the with statement:
> tenant
<Tenant: Tenant 1>
> tenant.pk
2
> User.objects.all()
[<User: test1>, <User: test2>, <User: test26>]
> context['users']
[<User: test1>, <User: test2>, <User: test26>]

我使用Visual Studio 2013和PyTools作为我的IDE。无论我使用运行服务器内置的Visual Studio 2013进行调试,还是使用命令&#39; python manage.py runserver&#39;,我都会得到相同的结果,所以我不认为这是我的问题IDE。

编辑:这里的参考是tenant_context()的代码 https://github.com/bernardopires/django-tenant-schemas/blob/master/tenant_schemas/utils.py#L25

@contextmanager
def tenant_context(tenant):
    previous_tenant = connection.tenant
    try:
        connection.set_tenant(tenant)
        yield
    finally:
        if previous_tenant is None:
             connection.set_schema_to_public()
        else:
             connection.set_tenant(previous_tenant)

0 个答案:

没有答案