Skip to main content
 首页 » 编程设计

python之在 Django 的 subview 中获取 url 父参数

2024年09月03日32zhoujg

我正在尝试配置我的项目以供多个企业使用。我的意思是,一个用户可以是一个用户的经理,另一个用户可以是客户。用户可以这样选择自己想要的企业:

所以需要根据使用的企业放urls,例如:

在 kiriosnet 企业:

  • www.kinet.com/kiriosNet/index
  • www.kinet.com/kiriosNet/new_order/。 .

在检查单元企业

  • www.kinet.com/checkcell/index
  • www.kinet.com/checkcell/new_order/
  • www.kinet.com/checkcell/employees/

等等...

我使用中间模型通过 django 组选择角色:

class UsuarioEmpresa(models.Model): 
    usuario = models.ForeignKey('Usuario') 
    empresa = models.ForeignKey(Empresa) 
    rol = models.ForeignKey(Group) 
    active = models.BooleanField(default=True) 
 
    class Meta: 
        verbose_name = "UsuarioEmpresa" 
        verbose_name_plural = "UsuariosEmpresas" 
 
    def __str__(self): 
        return "%s de %s" %(self.usuario, self.empresa) 

我正在这样尝试,在我的全局 url 中:

urlpatterns = [ 
    url(r'^admin/', admin.site.urls), 
    # Enterprise admin 
    url(r'^(?P<enterprise_name>[\w]+)/', include([ 
        url(r'^', include('app.urls')), 
        url(r'^reparaciones/', include('reparaciones.urls', namespace='reparaciones')), 
        url(r'^usuarios/', include('usuarios.urls', namespace='usuarios')), 
        url(r'^equipos/', include('equipos.urls', namespace='equipos')), 
        url(r'^empresas/', include('empresas.urls', namespace='empresas')), 
        url(r'^reportes/', include('reportes.urls', namespace='reportes')), 
    ])) 

]

以及应用程序网址:

urlpatterns = [ 
    # The home page 
    url(r'^$', views.index, name='index'), 
    ... 
] 

我在应用程序索引上的 views.py 是:

# Index user loged in 
@login_required 
def index(request, enterprise_name): 
    enterprise = Empresa.objects.filter(name__icontains = 'enterprise_name') 

我在尝试 http://127.0.0.1:8000/kiriosNet/

时遇到了以下错误
NoReverseMatch at /kiriosNet/ 
Reverse for 'index' with arguments '()' and keyword arguments '{}' not  
found. 1 pattern(s) tried: ['(?P<enterprise_name>[\\w]+)/$'] 

在我的中间模型中使用“事件” bool 字段来选择实际企业有多明智?我想现在就这样做。

请您参考如下方法:

您正在尝试做的事情称为 Multi-Tenancy ,并且有一个非常好的库,称为django-tenant-schema。 .

它的工作原理是将不同客户端的数据存储在同一数据库中的不同模式中。它需要一个模型来负责管理这种模式切换:

from django.db import models 
from tenant_schemas.models import TenantMixin 
 
class Client(TenantMixin): 
    name = models.CharField(max_length=100) 
    paid_until =  models.DateField() 
    on_trial = models.BooleanField() 
    created_on = models.DateField(auto_now_add=True) 
 
    # default true, schema will be automatically created and synced when it is saved 
    auto_create_schema = True 

我已经试过了,效果非常好。