2014-12-04 52 views
0

當我的用戶登錄到我的站點時,我需要定期從我的Django模型中獲取最新的帖子。當然,用AJAX。 Twitter和Facebook做到這一點。正確的方法來獲取最新的Django模型

在第一次加載時,最新的20個帖子被提取posts = Post.objects.all()[:20],並且我在request.session['post_fetched']中存儲了20個帖子。我向底部頁無限滾動正常工作與下面的代碼:

post_fetched = request.session['post_fetched'] 
new_post = Post.objects.all()[post_fetched: post_fetched + 20] 
request.session['post_fetched'] += 20 

我在Post.objects.all()100總職位,我想成爲一個能檢查是否有除表並獲取附加的那些,但我不能把我的頭圍繞着如何去做,正確的。

假設後增量至107的唯一方法,對我來說,我也能取7帖子是做到以下幾點:

request.session['total'] = len(Post.objects.all()) #this will be on first page load. 

而我的AJAX獲取最新的帖子:

total = request.session['total'] 
lastest_post = Post.objects.all()[total:] 
request.session['total'] = len(Post.objects.all()) 

如何獲取最新帖子而不必總是統計帖子總數?

回答

1

更好的方法是在會話中記錄要顯示的最後一條記錄的標識符,然後查詢那些之後的記錄。您可以使用pk,但是明確設置日期時間域created_at(使用auto_now_add)可能會更安全。現在你可以這樣做:

last_fetched = request.session['last_fetched'] 
new_posts = list(Post.objects.filter(created_at__gt=last_fetched)[:20]) 
request.session['last_fetched'] = new_posts[19].created_at 
+0

這是我現在在我的網站上使用它的時間。爲什麼'pk'不比'datetimefield(使用'auto_now_add')更安全? – Yax 2015-03-03 11:20:06

+1

嚴格來說,pk是一個與訂購無關的不透明數字。雖然這不太可能,但後來的職位可能會被分配到較早的pk。 – 2015-03-03 11:30:21