问题描述
我的平台有一个产品和一个商店模型,我只想为每个商店检索最近创建的3个产品。我不想遍历所有查询集,因为将来会有很多产品和商店。
所需的结果将是这样的:
(prod1store1,prod2store1,prod3store1,prod1store2,prod2store2,prod3store2 ... ...)
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