Python Django多租户的最佳解决方案是什么?

Python Django多租户的最佳解决方案是什么?,python,django,multi-tenant,Python,Django,Multi Tenant,我正在Django开发一个物业管理应用程序,最终会有多家公司,每个公司都有多个用户。我希望每个公司都有自己的发展道路。例如,mysite.com/company1/property/1/ 虽然我最终希望将来自不同公司的条目汇集到一个网站上,但我希望将所有内容都保存在一个数据库中 我能想到的一种方法是建立一个公司模型,然后让每个财产都有一个公司的外键。但我不确定如何最好地编码视图,以便只显示或修改当前公司的视图 做这件事最好的方法是什么 编辑:理想情况下,我希望创建一个视图/帮助器方法,该方法执行

我正在Django开发一个物业管理应用程序,最终会有多家公司,每个公司都有多个用户。我希望每个公司都有自己的发展道路。例如,
mysite.com/company1/property/1/

虽然我最终希望将来自不同公司的条目汇集到一个网站上,但我希望将所有内容都保存在一个数据库中

我能想到的一种方法是建立一个公司模型,然后让每个财产都有一个公司的外键。但我不确定如何最好地编码视图,以便只显示或修改当前公司的视图

做这件事最好的方法是什么


编辑:理想情况下,我希望创建一个视图/帮助器方法,该方法执行一个查询,将结果属性限制为公司,然后将查询集和请求传递给另一个视图。我想要一个URL结构,如:
mysite.com/company1/listproperties
。因此,这个函数将属性限制为Company1,然后我想使用URL的第二部分来确定要使用哪个视图(listProperties、searchProperties),并将其余的作为参数传递。但是,我不确定如何对第一个过滤视图和URL处理进行编码。

这里有几个问题。1:如何为模型之间的关系建模,2:如何显示单个公司的视图

对于问题一,Django在使用关系的数据建模中处理类似的问题。以下是关系的文档教程:

在您的示例中,物业与公司的关系是“多对一”,这意味着一家公司有许多物业,但一家物业只有一家公司。在Django(我提供给您的链接)中,通常只需在模型中使用外键,即“many”,或者在您的case属性中使用外键。下面是我要做的:

类属性(models.Model):
所有者=型号。外键(公司)
这还允许您查询关系,从而解决第二个问题

如果我有一家公司
c
,我可以访问与之相关的所有属性,如下所示:

c.property\u set.all()
#=>[属性,属性,…]
这是在视图中执行的查询,然后传递给模板


这里有一个Django提供的示例,您可能会发现它非常有用:。

谢谢!这就是我的想法(相对于使用ForeignKey然后查询公司子集的情况。我很好奇是否有一种方法可以将这个过程考虑在内。我是否可以创建一个视图/助手函数来执行此查询,然后将查询集和请求传递给另一个视图?我想保留
mysite.com/company1/listproperties
url结构ure。然后有一个
filterCompany(request,company)
方法来处理初步筛选,然后有一个
listProperties()
视图来接收筛选后的查询集并完成它需要做的工作。我怎么做呢?我不完全确定你在问什么,但一个示例查询可以是:
company.objects.get(pk=3).property_set.all()
。给定一个公司ID(pk=3),它会获取所有属性(假设我有上面的数据模型)。要获取一个特定的属性,
company.objects.get(pk=3).property_set.get(pk=4)
。现在您给它一个公司ID和属性ID,并可能返回一些内容。我希望避免将查询的公司部分编码到我的每个视图中。如果可能,我宁愿将其抽象出来,这样我就不需要
公司.object.get(pk=comp)
在每个视图中。我希望有一个这样做的视图,然后将查询集传递给listProperty等,并从该视图中进行后续筛选。有意义吗?这有点有意义,但您只需要函数即可。
def getCompany(id):Company.objects.get(pk=id)
def getProperties(id):Company.objects.get(pk=id).property\u set.all()
def getProperty(cid,pid):Company.objects.get(pk=cid)。property\u set.get(pk=pid)
。这并不难。或者您可能对基于类的视图继承感兴趣:。这就是从视图(如公司等)继承内容的方式除了阅读文档,我没什么要说的了。谢谢!我只是想让我的代码干涸,因为我知道这是最好的实践,抽象将减少重复和工作。我真的很欣赏添加的方向-将研究基于类的视图。