首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >django-租户:具有特定租户的Python

django-租户:具有特定租户的Python
EN

Stack Overflow用户
提问于 2022-06-30 10:39:38
回答 2查看 192关注 0票数 2

我想使用"./manage.py e.py shell“来对特定的租户运行一些Python命令,但是这样做的代码非常麻烦,因为我首先必须查找租户,然后使用with tenant_context(tenant)):,然后将我的代码写到这个块中。

我认为应该有这样的命令,由django-租户提供,但没有。

EN

回答 2

Stack Overflow用户

发布于 2022-07-13 08:24:40

我自己已经看过了,这是可行的,其中tenant1是您选择的租户:

python3 manage.py tenant_command shell --schema=tenant1

票数 2
EN

Stack Overflow用户

发布于 2022-06-30 10:46:39

为此,我编写了自己的小型管理命令,需要对其进行调整,以使用您自己的租户模型:

代码语言:javascript
复制
# <module>/management/commands/tenant_shell.py

from django.core.management.base import BaseCommand
from django.core.management import call_command
from django_tenants.utils import tenant_context

# TODO: Use your own tenant model
from core.models import Tenant

class Command(BaseCommand):
    def add_arguments(self, parser):
        parser.add_argument("-t", "--tenant", nargs=1)

    def handle(self, *args, **options):
        if options["tenant"] is None:
            print("ERROR: please supply a tenant with the -t or --tenant option")
            return
        tenant_name = options["tenant"][0]
        # TODO: Use your own filter logic (I have a field "name" in my model)
        tenants = Tenant.objects.filter(name=tenant_name)
        if len(tenants) == 0:
            print("ERROR: tenant",  tenant_name, "does not exist")
            return
        print("Run Python shell with tenant", tenant_name)
        with tenant_context(tenants[0]):
            del options["tenant"]
            del options["skip_checks"] # TODO I don't know why this extra parameter is passed here?
            call_command("shell", *args, **options)

然后,您可以使用

代码语言:javascript
复制
python ./manage.py tenant_shell -t "Tenant Name"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72814364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档