2010-01-22 3 views
1

J'ai une base de données Django multi-locataires. Tous mes modèles multi-locataires importés importent d'une classe AccountSpecificModel, qui en tant que FK à une classe Account. Maintenant, j'ai quelques unique=True et unqiue_together en Meta, qui ne spécifient pas account.Gestion de l'unicité dans une configuration Django multi-locataire

Dans mon scénario, pour AccountSpecificModel l'unicité n'a pas menaing à moins qu'il prend soin de account, ce qui signifie que je veux convertir chaque unique à un unique_together avec account et simlar pour unique_together.

Comment est-ce que je peux faire ceci?

Répondre

2

Si je vous comprends bien, c'est ce que vous voulez:

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

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

Notez que le « deux tuple » Je unique_together à affecté. Vous pouvez faire un tuple standard, mais s'il y a plus d'un champ que vous voulez être unique, il vous suffira de le changer quand même.

Maintenant, 500 comptes différents peuvent avoir un client avec le mail [email protected], mais aucun compte ne peut avoir 2 clients avec le même email.

0

Je n'ai pas bien compris votre question, mais j'ai trouvé que lors de l'implémentation de personnalisations complexes de classe de modèle django, une bonne solution est une usine de classe. J'ai trouvé que c'est moins compliqué et moins surprenant que l'héritage multiple et l'autre magie.

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

     class Meta: 
      [...] 

    return SomeClass 

RealClass = factory(SuperClass, args) 

J'ai essayé d'autres approches sur un problème de sondage similaire pendant un certain temps, mais une usine de classe a résolu le problème à la fin. Pensez-y, cela peut vous aider à résoudre votre problème.

Questions connexes