Django查询集每个商店仅检索最后创建的3个对象

问题描述

我的平台有一个产品一个商店模型,我只想为每个商店检索最近创建的3个产品。我不想遍历所有查询集,因为将来会有很多产品和商店。

所需的结果将是这样的:

(prod1store1,prod2store1,prod3store1,prod1store2,prod2store2,prod3store2 ... ...)

我尝试获取较新产品的数量,然后按lte = 3进行过滤:

products_queryset.annotate(newer_products=Count(Q(store=F('store')) & Q(created__gt=F('created')))).filter(newer_products__lte=3)

通过此查询,我总是得到 newer_products = 1 ,因此过滤器将返回所有产品。

解决方法

products_queryset.order_by('-id').all()[:3]
使用.order_by('-id')时,您说的是“从最高ID到最低ID对产品进行排序”,即从最新到最旧。如果您在那里有这样的字段(列),也可以使用一些“ -ctime”来实现。
[:3]说“按该顺序的前三个”。
然后,SQL就像SELECT * from products ORDER BY id DESC LIMIT 3