我有一个小应用程序,它允许用户评价一个视频。Django - 保存()更新重复密钥
用户只能打分一次。 所以我定义了模型的唯一性。
但他应该能够改变他的速度。 所以save()
应该重复键
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'
更新如果我
rate = VideoRate(user_id=1, video_id=1, crit_id=1, rate=2)
rate.save()
它节省了评级,但如果我
rate = VideoRate(user_id=1, video_id=1, crit_id=1, rate=3)
rate.save()
我得到正常的错误
IntegrityError: (1062, "Duplicate entry '1-1-1' for key 'user_id'")
即使我使用force_update=True
(因为仅基于主键)
有没有更新评级的方法,如果它已经存在,而无需事先检查数据?
+1:第一个选项会做2或3个查询,而第二个会做1。 – sdolan 2011-06-17 08:00:15
似乎还不错。你的意思是Django不能执行'INSERT INTO ... ON DUPLICATE KEY UPDATE ...'? – 2011-06-17 09:11:51
不,因为这是一个特定于MySQL的扩展,并且Django可以处理一系列数据库。 – 2011-06-17 09:20:48