处理多租户Django设置中的唯一性

时间:2010-01-22 08:20:09

标签: django django-models multi-tenant

我是一个多租户Django数据库。我的所有支持多租户的模型都从类AccountSpecificModel导入,该类作为FK导入到类Account。现在我在unique=True中有一些unqiue_togetherMeta,但没有指定account

在我的方案中,AccountSpecificModel唯一性没有任何分析,除非它处理account,这意味着我想将每个unique转换为unique_together account 1}},以及unique_together的simlar。

我该怎么做?

2 个答案:

答案 0 :(得分:2)

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

class Client(models.Model):
    account = models.ForeignKey(Account)
    email = models.EmailField()

    class Meta:
        unique_together = (('account', 'email'),)

注意我分配了unique_together的“两元组”。你可以做一个标准元组,但是如果你想要一个多个字段是唯一的,那么你只需要改变它。

现在,500个不同的帐户可以使用电子邮件example@example.com的客户端,但没有帐户可以拥有2个具有相同电子邮件的客户端。

答案 1 :(得分:0)

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

def factory(superclass, arguments):
    class SomeClass(superclass):
        [...]

        class Meta:
            [...]

    return SomeClass

RealClass = factory(SuperClass, args)

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