unicité de manipulation dans une configuration Django mutualisée
-
22-09-2019 - |
Question
J'ahve un locataire à plusieurs base de données Django. Tous mes locataires multi-modèles a permis d'importer à partir d'une AccountSpecificModel
de classe, qui comme FK à un Account
de classe. Maintenant, j'ai quelques unique=True
et unqiue_together
dans Meta
, qui ne précise pas account
.
Dans mon scénario, pour l'unicité de AccountSpecificModel
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 puis-je faire?
La solution
Si je 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'),)
Remarquez la "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 ensemble, vous aurez juste à changer de toute façon.
500 comptes différents peuvent avoir un client avec l'e-mail example@example.com, mais aucun compte ne peut avoir 2 clients avec le même email.
Autres conseils
Je ne comprends pas votre question tout à fait, mais je trouve que la mise en œuvre des personnalisations de classe modèle django complexe une bonne solution est une usine de classe. Je trouve qu'il est moins compliqué et moins surprenant que l'héritage multiple et d'autres 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 résolu le problème à la fin. Pensez-y, il peut vous aider à résoudre votre problème.