在特定条目之前显示最后三个条目

时间:2014-06-20 09:29:52

标签: django datetime django-filter

我有一个名为Entry的django对象,它有一个datetime字段start

class Entry(models.Model):
    start = models.DateTimeField()

我想获得在特定条目之前发生的最后三个条目。所以,如果我有7

  1. 2014-05-23 17:00:00
  2. 2014-05-23 20:15:00
  3. 2014-05-25 18:00:00
  4. 2014-05-26 16:00:00
  5. 2014-05-28 17:00:00
  6. 2014-06-10 18:00:00
  7. 2014-06-12 16:00:00
  8. 对于第4次比赛,我希望获得第3名,第2名和第1名。在我看来,我做了以下

    def example_view(request,customer_id, entry_id):
        customer = Customer.objects.get(pk=customer_id)
        entry = Entry.objects.get(pk=entry_id) #the specific entry
        former_entries = Entry.objects.all().filter(start__lte=entry.start, customer=customer).exclude(pk=entry_id).order_by('-start')[:3]
    

    我的thouhgt获得了特定条目之前的所有条目。但是如果同一条目存在,则将其从查询结果中排除。然后按开始日期订购它们并取前三个。但我没有得到我想要的结果。例如,第6次活动我得到了第7和第5。对于第5名,我得到第7名,第6名和第4名,依此类推。如何更正我的查询?我正在使用lte所以当特定条目是第6个时,为什么第7个显示在我的结果上。

1 个答案:

答案 0 :(得分:1)

我认为您需要撤消排序顺序,以便按反向启动时间进行排序。

另外,我不确定你的排除应该做什么。您希望得到比当前项目更少的内容,因此删除该排除似乎更合理,只使用__lt而不是__lte

former_entries = Entry.objects.all().filter(start__lt=entry.start, customer=customer).order_by('-start')[:3]