我有一个 Order 模型和 order_event 模型。每个 order_event 都有一个要订购的外键。所以从一个订单实例我可以得到:myorder.order_event_set
。我想获取所有订单的列表,但我希望它们按最后一个事件的日期排序。像这样的语句可以按最新事件日期排序:
queryset = Order.objects.all().annotate(
latest_event_date=Max('order_event__event_datetime')
).order_by('latest_event_date')
但是,我真正需要的是按 A SUBSET OF EVENTS 的最新日期排序的所有订单列表。例如,我的事件被分类为“调度”、“处理”等。所以我应该能够获得按最新调度事件排序的所有订单的列表。此 django 文档(https://docs.djangoproject.com/en/dev/topics/db/aggregation/#filter-and-exclude)显示了我如何使用过滤器获取最新的日程安排事件,但这不包括没有日程安排的订单事件。
我想我可以将过滤后的查询集与一个查询集结合起来,其中包括那些缺少调度事件的订单……但我不太确定如何做到这一点。我看到了与使用 python 列表相关的答案,但是拥有一个适当的 django 查询集会更有用(即,对于带有分页的视图等)
编辑回复:评论/建议
class Order(models.Model):
desc = models.CharField(max_length=30)
class Order_event(models.Model):
order = models.ForeignKey(Order)
event_datetime = models.DateTimeField(auto_now_add = True)
另外,我不介意在不止一个声明中这样做。此外,通过 python 而不是 orm 进行排序等是可以的,因为我不使用庞大的数据集。如果可能的话,出于您提到的原因,我宁愿远离 sql。组合单独的、排序的查询集似乎很有希望,但我被卡住了。