[英]Django sort queryset according to related objects
首先,春节快乐。
我遇到了这个问题,我正在寻找一种对queryset进行排序的好方法:
这是三个实体: Service, Order, Rating
。
一个Service
对象可以有多个Order
对象,一个Order
对象只能有一个Rating
对象。 现在,我想根据Service
的平均Rating
对Service
进行排名。
最直接的答案是:首先查询所有Service
Orders
并计算其平均Rating
,然后根据平均评分对Service
进行排序。
但是,我担心效率和响应速度。
因此,我认为Service
对象中应该有一个属性: Average_Rating
。 每次创建审阅时,都会更新Average_Rating
。
这种方法是提高响应速度的好方法吗? 如果是这样,实施它的最佳方法是什么? 谢谢。
如果您不想反规范化,则可以使用注释 。
假设您的模型如下所示:
class Service(models.Model):
name = models.CharField(max_length=5)
class Order(models.Model):
name = models.CharField(max_length=5)
service = models.ForeignKey(Service)
class Rating(models.Model):
order = models.OneToOneField('Order')
grade = models.IntegerField()
然后,您可以按平均值进行注释和查询:
Service.objects.annotate(avg_rate=Avg('order__rating__grade')).order_by('avg_rate')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.