我的Django网站涉及显示歌曲在网站上的播放次数,如果有人可以帮助我添加正确的触发器,该触发器在每次单击托管该歌曲的网页时会增加一个计数器,则它将非常感谢。
编写的代码:
在models.py
中K = 1 -> 2 -> 4 -> 8 -> ... -> m iterations
2^(m-1) < n/2
m-1 < log2(n/2)
m ~ log2(n)
在views.py中,用于另一个表格“歌曲”
class SongPlays(models.Model):
songid = models.ForeignKey(Songs, on_delete=models.CASCADE)
songhits = models.IntegerField( ? )
答案 0 :(得分:0)
我不确定我是否完全理解这个问题,但是我认为,一旦访问了名为detail的视图,您希望增加歌曲的点击数。您可以在访问歌曲后添加数据库查询,以将值增加1。
def detail(request, songid):
try:
song = Songs.objects.get(pk=songid)
song_play = SongPlays.objects.filter(songid=song)
SongPlays.objects.filter(songid=song).update(songhits=F('songhits')+1)
except Songs.DoesNotExist:
raise Http404("Song does not exist")
return render(request, 'music/detail.html', {'song': song} )
注意:我使用filter()而不是get(),以便您可以更新与乐曲关联的所有SongPlay条目。如果只有一个SongPlay要更新,则应使用get(),但update()将不起作用。您需要做类似的事情;
song_play.songhits = F('songhits') + 1
song_play.save()
使用外键时要小心。您是否希望这是一对一的关系,即每首歌曲应该只有一个SongPlay条目?目前,一首歌曲可能有许多SongPlay条目。
如果要添加到Song数据库中的唯一项目是命中数,是否可以将其作为字段添加到Song模型中?