2016-06-13 52 views
0

我有一個網站,給你隨機的笑話,問題是,有時它經常顯示相同的笑話。我有一個笑話模型,我想保存這些笑話的id,並且對於每個訪問者都要確保同一個笑話沒有顯示出來,比方說20個回合。但是,我怎樣才能保存這些數據並傳遞給它們呢? 這裏是我的觀點:Python-Django:保存看到的項目,以便不再顯示它們?

def random_good_joke_page(request): 
    """If asked for a random joke, redirect to joke's page.""" 
    return redirect('/jokes/%d/' % Joke.find_joke("Hot").id) 


def random_cold_joke_page(request): 
    """If asked for a random joke, redirect to joke's page.""" 
    return redirect('/jokes/%d/' % Joke.find_joke("Cold").id) 

現在,我需要保存已經顯示出笑話的ID,並檢查新的ID(從find_joke函數給出,這需要一個笑話評級,並返回一個隨機適當的笑話) ,如果最近顯示的笑話,選擇一個新的ID,直到有一個還沒有顯示。我如何保存這些數據並將它們傳遞給Django?我想到了cookies,或者爲Joke模型添加了這樣的功能(雖然我不認爲這是針對每個訪問者的,但是對於所有人來說......)。這種情況是否有一些默認的實用方法?謝謝

回答

2

你可以存儲在用戶的會話看到笑話:

seen_joke_ids = request.session.get('seen_joke_ids', []) 
joke = Joke.objects.exclude(pk__in=seen_joke_ids).order_by('?')[0] 
seen_joke_ids.append(joke.pk) 
request.session['seen_joke_ids'] = seen_joke_ids[-20:] 

# your logic to display/redirect 
return redirect(reverse('joke', args=[joke.pk])) 
+0

只有一兩件事:我怎麼能在排除添加另一個條件?我只想得到評分=「熱」的笑話,而不是評分=「冷」。除此之外,謝謝,我現在沒有這樣的事情... – Antoni4040

+1

只需鏈接查詢集: 'qs = Joke.objects.exclude(pk__in = seen_joke_ids).filter(rating ='hot')' 或: 'qs = qs.filter(rating__in = ['hot','semi_hot'])'等。 – ohrstrom

+0

是的,我想通了...謝謝,很好! – Antoni4040

相關問題