【问题标题】:Handling uniqueness in a multi-tenant Django setup处理多租户 Django 设置中的唯一性
【发布时间】:2010-01-22 08:20:08
【问题描述】:

我有一个多租户 Django 数据库。我所有启用多租户的模型都从类 AccountSpecificModel 导入,该类作为 FK 到类 Account。现在我在Meta 中有一些unique=Trueunqiue_together,它们没有指定account

在我的场景中,对于AccountSpecificModel,唯一性没有任何意义,除非它处理account,这意味着我想将每个unique 转换为unique_togetheraccount,类似unique_together .

我该怎么做?

【问题讨论】:

    标签: django django-models multi-tenant


    【解决方案1】:

    如果我的理解正确,这就是你想要的:

    class Client(models.Model):
        account = models.ForeignKey(Account)
        email = models.EmailField()
    
        class Meta:
            unique_together = (('account', 'email'),)
    

    注意我分配 unique_together 的“双元组”。你可以做一个标准的元组,但如果有多个字段你想一起是唯一的,你无论如何都必须改变它。

    现在 500 个不同的帐户可以有一个电子邮件地址为 example@example.com 的客户,但没有一个帐户可以有 2 个电子邮件地址相同的客户。

    【讨论】:

      【解决方案2】:

      我没有完全理解你的问题,但我发现在实现复杂的 django 模型类自定义时,一个好的解决方案是类工厂。我发现它没有多重继承和其他魔法那么复杂和令人惊讶。

      def factory(superclass, arguments):
          class SomeClass(superclass):
              [...]
      
              class Meta:
                  [...]
      
          return SomeClass
      
      RealClass = factory(SuperClass, args)
      

      我在类似的问题上尝试了一段时间的其他方法,但该类的工厂最终解决了这个问题。想一想,它可能会帮助你解决你的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-08
        相关资源
        最近更新 更多