在Django的子视图中获取父URL参数

2024-10-02 00:20:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将我的项目配置为用于多个企业。我的意思是用户可以是其中一个的经理,而另一个的客户。用户可以这样选择想要的企业: enter image description here

所以我需要根据企业使用的网址,例如:

在kiriosnet企业:

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

在checkcell企业

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

等等。。。在

我使用中间模型来选择使用django组的rol:

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)

我尝试这样,在我的全球网址:

^{pr2}$

]

以及应用程序的网址:

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

我的应用程序索引是:

# 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]+)/$']

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


Tags: 用户nameselfcomnewindexmodelswww
2条回答

您应该给请求的URL指定一个参数。在

@login_required
def index(request, empresa_name):
    Instance = ModelName.objects.filter(slug=empresa_name)

从电话发帖

您试图做的是称为multy 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

我试过了,效果很好。在

相关问题 更多 >

    热门问题