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 num = 0;
db[collection].find(query).forEach(function(doc) {
if (doc[averageField]) {
if (doc[averageField] !== undefined) {
total += doc[averageField];
num += 1;
}

View File

@ -960,11 +960,14 @@ class QuerySetTest(unittest.TestCase):
def test_average(self):
"""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]
for i, age in enumerate(ages):
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.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(Q(created_user=user)).count(), 1)
if __name__ == '__main__':
unittest.main()