1 回答

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超4個贊
我不明白為什么你循環(huán)遍歷所有對象,而你所需要的只是找到特定和.PlayCountusersong
另請注意,只會找到與您傳遞給它的所有參數(shù)匹配的特定對象,因此將嘗試查找具有您指定的確切播放次數(shù)的對象,該對象不是您想要的。get_or_createget_or_create(user=..., song=..., plays=...)
您只需執(zhí)行以下操作:
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()
因此,在這里,我們首先獲取或創(chuàng)建特定歌曲和用戶的計(jì)數(shù)器。如果我們創(chuàng)建它,我們通過在參數(shù)中設(shè)置它來設(shè)置為1。playsdefaults
然后,如果未創(chuàng)建它(即它是現(xiàn)有的),我們使用表達(dá)式遞增1,這可確保它直接在數(shù)據(jù)庫中更新(并且如果另一個請求正在更新相同的值,則不會有數(shù)據(jù)庫不一致的風(fēng)險)。playsF
添加回答
舉報