2

我有这个模型

class messages(models.Model):
    status_choices = (
        (u'read',u'read'),
        (u'unread',u'unread')
        )
    user = models.ForeignKey(User)
    message = models.TextField()
    status = models.CharField(max_length=6,choices=status_choices,default='unread')
    sender = models.ForeignKey(User,related_name="sender")

现在我只想获取属于“user1”的前 10 条消息,在第二个请求中获取接下来的 10 条消息,依此类推。我该怎么做?

4

2 回答 2

3

Django 已经通过一个Paginator对象提供了这个功能。在您的 URL 中,您需要一个page参数来说明您在哪个页面上,并且在您的视图中您需要构造一个Paginator对象。您需要指定页面上的对象数量(在您的情况下为 10),Paginator其余的将由您完成。

例如,以下代码将打印第 3 页上显示的所有实例:

from django.core.paginator import Paginator

objects = messages.objects.all()
p = Paginator(objects, 10)
page3 = p.page(3)
print page3.object_list

该文档提供了有关如何实现视图以及如何将对象列表传递给模板的示例。

于 2012-07-11T13:34:03.900 回答
0

首先有两件事

  • 您的模型应该大写(约定)
  • “消息”是 contrib 包的一部分,在尝试同时使用 contrib 的消息和您的应用程序的消息时,如果没有命名空间会引发冲突(https://docs.djangoproject.com/en/dev/ref/contrib/messages/#module -django.contrib.messages)

编辑

删除了我的代码示例,碰到了 Simeon Visser 的解决方案

于 2012-07-11T13:39:22.003 回答