【问题标题】:Handling uniqueness in a multi-tenant Django setup处理多租户 Django 设置中的唯一性
【发布时间】:2010-01-22 08:20:08
【问题描述】:
我有一个多租户 Django 数据库。我所有启用多租户的模型都从类 AccountSpecificModel 导入,该类作为 FK 到类 Account。现在我在Meta 中有一些unique=True 和unqiue_together,它们没有指定account。
在我的场景中,对于AccountSpecificModel,唯一性没有任何意义,除非它处理account,这意味着我想将每个unique 转换为unique_together 和account,类似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)
我在类似的问题上尝试了一段时间的其他方法,但该类的工厂最终解决了这个问题。想一想,它可能会帮助你解决你的问题。