Django:创建点击触发器

时间:2018-10-17 19:08:12

标签: django

我的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( ? )

1 个答案:

答案 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模型中?