我有一个如下所示的模型
class ProductScore(models.Model):
client = models.ForeignKey(User)
created = models.DateTimeField(default=datetime.datetime.now)
score = models.IntegerField()
scale = models.ForeignKey(Product)
截至目前,我正在使用以下查询来过滤掉上述模型中的重复项
scores = ProductScore.objects.filter(client=request.user).distinct('scale')
通过上面的查询,它返回唯一的结果,但很旧(创建日期很旧),我的意思是,例如,如果上表ProductScore
有 10 条重复记录,其中 5 条是昨天创建的,另外 5 条是今天创建的,上面的查询返回 5 条昨天创建的唯一记录。
但我想要最近创建的记录(即今天)并且是唯一的,所以我尝试如下
scores = ProductScore.objects.filter(client=request.user).order_by('created').distinct('scale')
这不起作用并抛出一些programming error exception
*** ProgrammingError: SELECT DISTINCT ON expressions must match initial ORDER BY expressions
LINE 1: SELECT DISTINCT ON ("product_productscore"."scale...
^
那么我如何从上表中获取最近创建的唯一记录呢?
PostgreSQL 要求你这样做:
ProductScore.objects.filter(client=request.user).order_by('scale', '-created').distinct('scale')
...订购依据-created
将为您提供每个重复项中最新的一个,尽管您的整体查询结果将按以下顺序排序scale
field
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)