J'ai une petite application qui permet à un utilisateur d'évaluer une vidéo.Django - save() mise à jour sur la clé en double
L'utilisateur ne peut évaluer qu'une seule fois. J'ai donc défini l'unicité sur le modèle.
Mais il devrait pouvoir changer son taux. Ainsi, le save()
devrait mettre à jour le double clé
class VideoRate(models.Model):
"""Users can Rate each Video on the criterias defined for the topic"""
user = models.ForeignKey(User)
video = models.ForeignKey(VideoFile)
crit = models.ForeignKey(VideoCrit)
rate = models.DecimalField(max_digits=2, decimal_places=1, choices=RATE_CHOICES)
class Meta:
unique_together = (('user', 'video', 'crit'),)
verbose_name = 'Video Rating'
Si je
rate = VideoRate(user_id=1, video_id=1, crit_id=1, rate=2)
rate.save()
Il économise la note, mais si je
rate = VideoRate(user_id=1, video_id=1, crit_id=1, rate=3)
rate.save()
Je reçois l'erreur normale
IntegrityError: (1062, "Duplicate entry '1-1-1' for key 'user_id'")
Même si j'utilise force_update=True
(puisque basé uniquement sur les clés primaires)
Existe-t-il un moyen de mettre à jour la notation si elle existe déjà sans avoir à vérifier les données avant?
+1: La première option fera 2 ou 3 requêtes, tandis que la seconde fera l'affaire 1. – sdolan
Semble pas mal. Vous voulez dire que Django ne peut pas effectuer un 'INSERT INTO ... ON DUPLICATE KEY UPDATE ...'? –
Non, parce que c'est une extension spécifique à MySQL, et Django travaille avec de nombreuses bases de données. –