我想使用"./manage.py e.py shell“来对特定的租户运行一些Python命令,但是这样做的代码非常麻烦,因为我首先必须查找租户,然后使用with tenant_context(tenant)):,然后将我的代码写到这个块中。
我认为应该有这样的命令,由django-租户提供,但没有。
发布于 2022-07-13 08:24:40
我自己已经看过了,这是可行的,其中tenant1是您选择的租户:
python3 manage.py tenant_command shell --schema=tenant1
发布于 2022-06-30 10:46:39
为此,我编写了自己的小型管理命令,需要对其进行调整,以使用您自己的租户模型:
# <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)然后,您可以使用
python ./manage.py tenant_shell -t "Tenant Name"https://stackoverflow.com/questions/72814364
复制相似问题