首页 > 解决方案 > 如何同时减少查询集字段的值?

问题描述

我想建立一个网站,人们可以在其中列出要出售的东西。我希望它有一个首页,始终显示最流行(热门)的项目。
受欢迎程度随着时间的推移而降低,随着活动(出价、评论、点击)的增加而增加。每个项目都以 100 的受欢迎程度开始。
这样,无趣的项目会迅速消失,而有趣的项目会持续更长时间。
因此,每次用户与对象交互时,它的受欢迎程度都会增加(例如,每次来自唯一用户的获取请求以获取对象的详细信息,它的受欢迎程度值就会增加 1,每次出价都会增加 10)。
相反,每经过一分钟左右,所有当前活跃项目的受欢迎程度都会降低。一旦它达到 0,它将被“停用”它仍然可以交易,但它永远不会再次出现在首页。
问题是,如何降低所有活动项目的查询集的流行度?
我意识到每次用户请求首页。我可以只获取所有活动对象,计算 python 代码中的流行度并手动对它们进行排序,但这很浪费。
我知道我可以通过使用更新函数轻松设置整个查询集的属性,但这只需要整个集合的一个绝对值。是否有一种内置方法可以将属性减少一个?
还是我只需要遍历查询集并手动减少每个值?

标签: djangorest

解决方案


class Item(models.Model):
    popularity = models.IntegerField()

Item.objects.update(popularity=models.F('popularity')-1)

这就是你如何根据它的值更新查询集而不是给它一个绝对值,你可以调整它来满足你的需要。


推荐阅读