Fixed QuerySet.average issue that ignored 0

This commit is contained in:
Harry Marr 2010-08-30 19:48:17 +01:00
parent f1aec68f23
commit 17642c8a8c
2 changed files with 6 additions and 2 deletions

View File

@ -892,7 +892,7 @@ class QuerySet(object):
var total = 0.0; var total = 0.0;
var num = 0; var num = 0;
db[collection].find(query).forEach(function(doc) { db[collection].find(query).forEach(function(doc) {
if (doc[averageField]) { if (doc[averageField] !== undefined) {
total += doc[averageField]; total += doc[averageField];
num += 1; num += 1;
} }

View File

@ -960,11 +960,14 @@ class QuerySetTest(unittest.TestCase):
def test_average(self): def test_average(self):
"""Ensure that field can be averaged correctly. """Ensure that field can be averaged correctly.
""" """
self.Person(name='person', age=0).save()
self.assertEqual(int(self.Person.objects.average('age')), 0)
ages = [23, 54, 12, 94, 27] ages = [23, 54, 12, 94, 27]
for i, age in enumerate(ages): for i, age in enumerate(ages):
self.Person(name='test%s' % i, age=age).save() self.Person(name='test%s' % i, age=age).save()
avg = float(sum(ages)) / len(ages) avg = float(sum(ages)) / (len(ages) + 1) # take into account the 0
self.assertAlmostEqual(int(self.Person.objects.average('age')), avg) self.assertAlmostEqual(int(self.Person.objects.average('age')), avg)
self.Person(name='ageless person').save() self.Person(name='ageless person').save()
@ -1340,5 +1343,6 @@ class QTest(unittest.TestCase):
self.assertEqual(Post.objects.filter(created_user=user).count(), 1) self.assertEqual(Post.objects.filter(created_user=user).count(), 1)
self.assertEqual(Post.objects.filter(Q(created_user=user)).count(), 1) self.assertEqual(Post.objects.filter(Q(created_user=user)).count(), 1)
if __name__ == '__main__': if __name__ == '__main__':
unittest.main() unittest.main()