【发布时间】:2015-10-15 05:53:02
【问题描述】:
我正在尝试执行类似于此 SO 问题中的第一个响应:SQL ordering by rating/votes,其中可以对资源进行评级(每个用户每个资源一个评级),但是在根据其评级对资源进行排序时,任何资源小于 X 的单独评分将显示在具有 X 或更多的评分下方。
我在 Django 中实现这一点,我非常希望避免使用原始查询并保留在 Django 模型和查询框架中。
到目前为止,这就是我所拥有的:
data = []
data_top = Resource.objects.all().annotate(rating=Avg('resourcerating__rating'),rate_count=Count('resourcerating')).exclude(rate_count__lt=settings.ORB_RESOURCE_MIN_RATINGS).order_by(order_by)
for d in data_top:
data.append(d)
data_bottom = Resource.objects.all().annotate(rating=Avg('resourcerating__rating'),rate_count=Count('resourcerating')).exclude(rate_count__gte=settings.ORB_RESOURCE_MIN_RATINGS).order_by(order_by)
for d in data_bottom:
data.append(d)
这所有功能并根据我的需要返回按评级排序,但是,感觉效率不高 - 运行 2 个查询并循环遍历每个查询的结果。
有没有更好的方法可以在单个查询中进行编码,或者至少避免在每个查询集中循环?
非常感谢任何帮助。
【问题讨论】:
标签: python django django-models