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

Django 在特定条目之前显示最后三个条目,django,datetime,django-filter,Django,Datetime,Django Filter,我有一个名为Entry的django对象,它有一个datetime字段start class Entry(models.Model): start = models.DateTimeField() 我想获取在特定条目之前出现的最后三个条目。如果我有7个 2014-05-23 17:00:00 2014-05-23 20:15:00 2014-05-25 18:00:00 2014-05-26 16:00:00 2014-05-28 17:00:00 2014-06-10 18:00:0

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

class Entry(models.Model):
    start = models.DateTimeField()
我想获取在特定条目之前出现的最后三个条目。如果我有7个

  • 2014-05-23 17:00:00
  • 2014-05-23 20:15:00
  • 2014-05-25 18:00:00
  • 2014-05-26 16:00:00
  • 2014-05-28 17:00:00
  • 2014-06-10 18:00:00
  • 2014-06-12 16:00:00
  • 对于第四个项目,我想要第三个、第二个和第一个。在我看来,我做到了以下几点

    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]
    

    我的想法是获取特定条目之前的所有条目。但如果某个条目在同一天存在,则将其从查询结果中排除。然后按开始日期订购,取前三个。但是我没有得到我想要的结果。例如,对于第六项,我得到第七项、第五项和第四项。第五名是第七名、第六名和第四名,依此类推。如何更正我的查询?我使用的是
    lte
    ,那么为什么当我指定的条目是第6条时,我的结果会显示第7条呢

    我认为您需要颠倒排序顺序,以便按相反的开始时间排序

    另外,我不确定你的排除应该做什么。您希望得到比当前项少的内容,因此删除该排除项并只使用
    \uu lt
    而不是
    \uu lte
    似乎更明智

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

    我已经更正了它并编辑了我的帖子。至于错误的结果,我使用entry作为for循环中的变量,它改变了结果……真是太粗心了!