我有一個小應用程序,它允許用戶評價一個視頻。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