我正在開發一個音樂Web應用程序,我試圖計算一首歌的播放次數。單擊播放按鈕時,將調用一個名為的函數。在這里,我嘗試使用來更新模型,如下所示。getLink()get_or_createPlayCounth = 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:8000play is not defined我該如何繼續?
1 回答

蝴蝶不菲
TA貢獻1810條經驗 獲得超4個贊
我不明白為什么你循環遍歷所有對象,而你所需要的只是找到特定和.PlayCountusersong
另請注意,只會找到與您傳遞給它的所有參數匹配的特定對象,因此將嘗試查找具有您指定的確切播放次數的對象,該對象不是您想要的。get_or_createget_or_create(user=..., song=..., plays=...)
您只需執行以下操作:
from django.db.models import F
play_counter, created = PlayCount.objects.get_or_create(
user=request.user,
song=song,
defaults={'plays': 1})
if not created:
play_counter.plays = F('plays') + 1
play_counter.save()
因此,在這里,我們首先獲取或創建特定歌曲和用戶的計數器。如果我們創建它,我們通過在參數中設置它來設置為1。playsdefaults
然后,如果未創建它(即它是現有的),我們使用表達式遞增1,這可確保它直接在數據庫中更新(并且如果另一個請求正在更新相同的值,則不會有數據庫不一致的風險)。playsF
添加回答
舉報
0/150
提交
取消