我有一个名为Entry的django对象,它有一个datetime字段start
class Entry(models.Model):
start = models.DateTimeField()
我想获得在特定条目之前发生的最后三个条目。所以,如果我有7
对于第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个显示在我的结果上。
答案 0 :(得分:1)
我认为您需要撤消排序顺序,以便按反向启动时间进行排序。
另外,我不确定你的排除应该做什么。您希望得到比当前项目更少的内容,因此删除该排除似乎更合理,只使用__lt
而不是__lte
。
former_entries = Entry.objects.all().filter(start__lt=entry.start, customer=customer).order_by('-start')[:3]