返回查询集中的第一个和最后一个(n)个对象

时间:2019-02-01 03:03:22

标签: python django

我正在尝试返回单个查询集的第一个实例和最后四个实例。在这种情况下,对象实例是注释。

我尝试过first()和last(),负索引(不起作用),Q对象等。在任何地方都找不到答案。

class Thread(models.Model):
    date_created = models.DateTimeField(...)
    ...

class Comment(models.Model):
    thread = models.ForeignKey(Thread)
    ...

threads = Thread.objects.prefetch_related('comment_set').all()

我试图遍历模板中的每个线程,并仅返回前4个注释(如果queryset有足够的注释)。我不想将查询集变成一个列表。有任何想法吗?谢谢。

1 个答案:

答案 0 :(得分:0)

颠倒顺序并切成前4个。您将需要在某个字段上使用order_by,例如,如果Comment模型具有一个date_created字段:

comments_qs = thread.comment_set.all()
first4 = comments_qs.order_by("date_created")[:4]
last4 = comments_qs.order_by("-date_created")[:4]