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)