我正在尝试配置我的项目以用于多个企业。我的意思是用户可以是一个人的管理者,而另一个可以是客户。用户可以这样选择想要的企业:
因此,我需要根据所使用的企业放置网址,例如:
在kiriosnet企业中:
在Checkcell企业
依此类推...
我使用中间模型通过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)
我正在这样尝试,在我的全局网址中:
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]+)/$']
在中间模型中使用bolean字段“活动”来选择实际企业有何建议?我正在考虑这样做。
答案 0 :(得分:1)
您应该为请求的URL提供一个参数。
@login_required
def index(request, empresa_name):
Instance = ModelName.objects.filter(slug=empresa_name)
通过电话发布
答案 1 :(得分:1)
您尝试做的事情叫做 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
我已经尝试过,并且工作非常顺利。