Tengo una pequeña aplicación que permite a un usuario calificar un video.Django - save() actualización en clave duplicada
El usuario puede calificar solo una vez. Así que he definido la singularidad en el modelo.
Pero debería poder cambiar su velocidad. Así que la save()
debe actualizar el duplicado clave
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
rate = VideoRate(user_id=1, video_id=1, crit_id=1, rate=2)
rate.save()
Ha ahorro de la calificación, pero si
rate = VideoRate(user_id=1, video_id=1, crit_id=1, rate=3)
rate.save()
consigo el error normal de
IntegrityError: (1062, "Duplicate entry '1-1-1' for key 'user_id'")
Incluso si uso force_update=True
(ya que se basa únicamente en las claves principales)
¿Hay alguna forma de actualizar la clasificación si ya existe sin tener que verificar datos antes?
+1: La primera opción hará 2 o 3 consultas, mientras que la segunda hará 1. – sdolan
Parece que no está mal. ¿Quieres decir que Django no puede realizar un 'INSERT INTO ... ON DUPLICATE KEY UPDATE ...'? –
No, porque esa es una extensión específica de MySQL, y Django funciona con una variedad de bases de datos. –