在Django查询集中查找用户的最新评级
||
我正在寻找一种方法来获取所有资源的特定人员的最新评分。
目前,我正在使用类似“ 0”的查询
然后将其通过带有资源和用户属性键的ѭ1传递,然后再以ѭ2进行查找。使用django queryset函数,有没有更优雅的方法呢?
这些是相关的模型。
class Person(models.Model):
pass
class Resource(models.Model):
pass
class Rating(models.Model):
rating = models.IntegerField()
timestamp = models.DateField()
resource = models.ForeignKey(\'Resource\')
user = models.ForeignKey(\'Person\')
我需要保留所有旧的Ratings,因为其他功能需要能够保持事物“变化”的历史。
没有找到相关结果
已邀请:
1 个回复
犁攀富
您也许可以使用Aggregate函数来获取每个资源的最新记录,或者巧妙地使用Q对象来限制SQL请求(我的示例可能为您节省了一些请求,并且更加优雅,但并非如此简单)就像您可以通过原始SQL请求生成的内容一样)。在原始SQL中,您将使用内部的
或执行良好的
来获得最新的评级,因此最好模拟一下。 您还可以在Rating模型上创建一个post_save信号钩子和一个'active \'或\'current \'布尔字段,这将迭代与用户/资源匹配的其他评级,并将其'active \'字段设置为False。即post_save钩子将使用以下方式将所有其他等级标记为对用户/资源无效:
然后,您可以对以下内容进行简单的查询:
这将是最经济的查询(即使您在原始SQL中进行了复杂的分组依据/内部选择,您所做的查询也比必要的更为复杂)。使用布尔值字段还意味着您可以为用户的评分提供“前进/后退” /“撤消/重做”行为(如果相关)。