当用户登录我的网站时,我需要定期从我的Django模型中获取最新帖子。当然,有了AJAX。 Twitter和Facebook这样做。
首次加载时,最新的20个帖子被提取posts = Post.objects.all()[:20]
,我将20个帖子存储在request.session['post_fetched']
中。我对底部页面的无限滚动可以正常使用以下代码:
post_fetched = request.session['post_fetched']
new_post = Post.objects.all()[post_fetched: post_fetched + 20]
request.session['post_fetched'] += 20
我在100
中有Post.objects.all()
个帖子,我希望能够检查表格中是否有其他内容并获取添加的内容但我无法理解如何做得好,正确。
假设帖子增加到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())
如何在不必总计算总帖子的情况下获取最新帖子?
答案 0 :(得分:1)
更好的方法是在会话中记录要显示的最后一条记录的标识符,然后查询之后的那些记录。您可以使用pk,但明确设置created_at
datetimefield(使用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