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

时间:2014-06-17 04:00:09

标签: python django multi-tenant

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

最终,虽然我想将每个不同公司的条目汇集到一个站点上 - 所以我想将所有内容保存在一个数据库中。

我能想到的一种方法是设置公司模型,然后让每个属性都有一个ForeignKey for Company。但后来我不确定如何最好地编写视图以仅显示或修改当前公司。

这样做的最佳方式是什么?

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

1 个答案:

答案 0 :(得分:1)

你在这里问几件事。 1:如何建模模型之间的关系,2:如何显示单个公司的视图

对于问题一,Django在关系数据建模中处理这样的问题。以下是关系的文档教程:https://docs.djangoproject.com/en/dev/topics/db/models/#relationships

在您的示例中,Property to Company关系是“多对一”,这意味着公司有许多属性,但属性只有一个公司。在Django(我给你的链接)中,通常所做的一切都是模型中的外键,即'many',或者在你的情况下是Property。这就是我要做的事情:

class Property(models.Model):
  owner = models.ForeignKey(Company)

这也允许您查询关系,解决第二个问题。

如果我有公司c,我可以像这样访问与之关联的所有属性:

c.property_set.all()
# => [Property <MyProperty>, Property <OtherProperty>, ...]

这是您在视图中执行的查询,然后传递给模板。

这是一个Django提供的这个非常有用的例子(多对一)你可能会觉得有用:https://docs.djangoproject.com/en/dev/topics/db/examples/many_to_one/