1

マルチテナントの Django データベースがあります。私のすべてのマルチテナント対応モデルは、クラスAccountSpecificModelへの FK としてクラスからインポートしAccountます。今、私はunique=Trueunqiue_togetherinをいくつか持っていますがMeta、これらは を指定していませんaccount

私のシナリオでは、 for の一意性は、 をAccountSpecificModel処理しない限り何の脅威にもなりません。accountuniqueunique_togetheraccountunique_together

これどうやってするの?

4

2 に答える 2

2

私があなたを正しく理解しているなら、これはあなたが望むものです:

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

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

unique_togetherを割り当てた「2タプル」に注意してください。標準のタプルを実行できますが、一緒に一意にしたいフィールドが複数ある場合は、とにかく変更する必要があります。

これで、500の異なるアカウントがexample@example.comの電子メールを持つクライアントを持つことができますが、同じ電子メールを持つ2つのクライアントを持つことができるアカウントはありません。

于 2010-01-26T01:38:51.553 に答える
0

私はあなたの質問を完全には理解していませんでしたが、複雑な django モデル クラスのカスタマイズを実装する場合、1 つの良い解決策がクラス ファクトリであることがわかりました。多重継承やその他の魔法よりも複雑ではなく、驚くべきことでもないことがわかりました。

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

        class Meta:
            [...]

    return SomeClass

RealClass = factory(SuperClass, args)

しばらくの間、同様の音の問題に対して他のアプローチを試みましたが、クラスのファクトリが最終的に問題を解決しました。考えてみてください、それはあなたの問題を解決するのに役立つかもしれません.

于 2010-01-22T16:51:16.823 に答える