euscanwww: Improved query for aggregating handler's data

Signed-off-by: volpino <fox91@anche.no>
This commit is contained in:
volpino 2012-11-27 14:16:56 +01:00
parent c6a0c29401
commit 3f47a08a54
3 changed files with 8 additions and 16 deletions

View File

@ -119,6 +119,7 @@ class PackageMixin(object):
return packages.filter(version__handler=handler,
version__overlay="").distinct()
class PackageQuerySet(models.query.QuerySet, PackageMixin):
pass

View File

@ -58,8 +58,8 @@
{% for handler in handlers %}
<tr>
<td>
<a href="{% url "statistics_handler" handler.handler %}">
{{ handler.handler }}
<a href="{% url "statistics_handler" handler.handler %}">
{{ handler.handler }}
</a>
</td>
<td>{{ handler.n }}</td>

View File

@ -380,21 +380,12 @@ def config(request):
@render_to("euscan/statistics.html")
def statistics(request):
# Didn't found a way to do:
# SELECT COUNT(*), AVG(confidence) FROM Versions
# GROUP BY handler
handlers = ( Version.objects.values("handler")
.filter(overlay="")
.annotate(n=models.Count("handler"))
handlers = (
Version.objects.values("handler")
.filter(overlay="")
.annotate(n=models.Count("handler"),
avg_conf=models.Avg("confidence"))
)
for i in xrange(len(handlers)):
handler_id = handlers[i]['handler']
avg = ( Version.objects.filter(handler=handler_id)
.aggregate(avg=models.Avg("confidence"))
)
if not handler_id:
handlers[i]['handler'] = "None"
handlers[i]['avg_conf'] = avg['avg'] if 'avg' in avg else 0
return {"handlers": handlers}