遇到 django ORM 查询异常行为。打印时过滤的查询集仅显示一个值,但是当我尝试在该查询集上执行 .first() 和 .last() 时,它显示两个不同的值
在下面的查询中,我有一个文档表,其中有外键 --> user_id 一个用户可以在文档表中拥有多个条目。我想在文档表中找到给定 user_id 的最新条目 id。 查询集仅显示一个项目,但执行 .first() 显示的项目甚至不是查询集的一部分。为什么会出现这种行为?
qs = Document.objects.filter(user_id=1537).values('user_id').annotate(max_id=Max('id'))
输出:
qs.first()
输出:{'user_id':1537,'max_id':33}
qs.last()
输出:{'user_id':1537,'max_id':37}
使用值**('user_id')**会导致无序查询集,这是意外行为的原因。不保证执行first()或last()的结果将是最大值。因此,请按 '-max id' 排序以保证正确排序。 试试这个;
qs = Document.objects.filter(user_id=1537).values('user_id').annotate(max_id=Max('id')).order_by('-max_id')
希望对你有帮助:)