我正在开发一个音乐网络应用程序,我试图计算一首歌的播放次数。单击播放按钮时,将调用名为getLink()
的函数。这里,我尝试使用get_or_create
来更新PlayCount
模型,如下所示
h = PlayCount.objects.all()
if len(h) == 0:
u = PlayCount.objects.get_or_create(
user=request.user.username,
song=song,
plays=1,
)[0]
u.save()
else:
flag = False
for i in h:
if i.song == song:
u = PlayCount.objects.get_or_create(
user=request.user.username,
song=song,
plays=plays + 1,
)[0]
u.save()
flag = True
break
else:
pass
if flag is False:
u = PlayCount.objects.get_or_create(
user=request.user.username,
song=song,
plays=1,
)[0]
u.save()
else:
pass
但是,当我进入else循环时,127.0.0.1:8000
返回play is not defined
我该怎么办
我不明白为什么要遍历所有的
PlayCount
对象,而只需要找到特定的user
和song
对象还请注意
get_or_create
将只找到与传递给它的参数匹配的特定对象,因此get_or_create(user=..., song=..., plays=...)
将尝试找到一个与您指定的确切播放次数不匹配的对象您只需执行以下操作:
因此,这里我们首先获取或创建特定歌曲和用户的计数器。如果我们创建它,我们通过在
defaults
参数中设置它来将plays
设置为1然后,如果没有创建它(即,它是一个现有的),我们使用
F
表达式将plays
增加1,这样可以确保它直接在数据库中更新(如果另一个请求正在更新相同的值,则不存在数据库不一致的风险)相关问题 更多 >
编程相关推荐