如何解决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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。