Django Unique Together (avec des clés étrangères)

J’ai une situation où je veux utiliser les options Meta de unique_together pour appliquer une certaine règle, voici le modèle intermédiaire:

 class UserProfileExtension(models.Model): extension = models.ForeignKey(Extension, unique=False) userprofile = models.ForeignKey(UserProfile, unique=False) user = models.ForeignKey(User, unique=False) class Meta: unique_together = (("userprofile", "extension"), ("user", "extension"), # How can I enforce UserProfile's Client # and Extension to be unique? This obviously # doesn't work, but is this idea possible without # creating another FK in my intermediary model ("userprofile__client", "extension")) 

et voici UserProfile:

 class UserProfile(models.Model): user = models.ForeignKey(User, unique=True) client = models.ForeignKey(Client) 

Merci.

Vous ne pouvez pas

La clause unique_together est directement traduite en index unique SQL . Et vous ne pouvez définir que ceux des colonnes d’une seule table, et non une combinaison de plusieurs tables.

Vous pouvez toutefois append la validation vous-même, simplement écraser la méthode validate_unique et lui append cette validation.

Docs: http://docs.djangoproject.com/en/dev/ref/models/instances/#django.db.models.Model.validate_unique

Ma solution consistait à utiliser get_or_create de Django. En utilisant get_or_create, un résultat inutile se produira si la ligne existe déjà dans la firebase database et la ligne sera créée si elle n’existe pas.

Exemple:

 extension = Extension.objects.get(pk=someExtensionPK) 
userProfile = UserProfile.objects.get(pk=someUserProfilePK)
UserProfileExtension.objects.get_or_create(extension=extension, userprofile=userProfile)