Ensure that field can be averaged correctly.
(self)
| 3463 | assert freqs == {1: 50.0 / 70, 2: 20.0 / 70} |
| 3464 | |
| 3465 | def test_average(self): |
| 3466 | """Ensure that field can be averaged correctly.""" |
| 3467 | self.Person(name="person", age=0).save() |
| 3468 | assert int(self.Person.objects.average("age")) == 0 |
| 3469 | |
| 3470 | ages = [23, 54, 12, 94, 27] |
| 3471 | for i, age in enumerate(ages): |
| 3472 | self.Person(name="test%s" % i, age=age).save() |
| 3473 | |
| 3474 | avg = float(sum(ages)) / (len(ages) + 1) # take into account the 0 |
| 3475 | assert round(abs(int(self.Person.objects.average("age")) - avg), 7) == 0 |
| 3476 | |
| 3477 | self.Person(name="ageless person").save() |
| 3478 | assert int(self.Person.objects.average("age")) == avg |
| 3479 | |
| 3480 | # dot notation |
| 3481 | self.Person(name="person meta", person_meta=self.PersonMeta(weight=0)).save() |
| 3482 | assert ( |
| 3483 | round(abs(int(self.Person.objects.average("person_meta.weight")) - 0), 7) |
| 3484 | == 0 |
| 3485 | ) |
| 3486 | |
| 3487 | for i, weight in enumerate(ages): |
| 3488 | self.Person( |
| 3489 | name=f"test meta{i}", person_meta=self.PersonMeta(weight=weight) |
| 3490 | ).save() |
| 3491 | |
| 3492 | assert ( |
| 3493 | round(abs(int(self.Person.objects.average("person_meta.weight")) - avg), 7) |
| 3494 | == 0 |
| 3495 | ) |
| 3496 | |
| 3497 | self.Person(name="test meta none").save() |
| 3498 | assert int(self.Person.objects.average("person_meta.weight")) == avg |
| 3499 | |
| 3500 | # test summing over a filtered queryset |
| 3501 | over_50 = [a for a in ages if a >= 50] |
| 3502 | avg = float(sum(over_50)) / len(over_50) |
| 3503 | assert self.Person.objects.filter(age__gte=50).average("age") == avg |
| 3504 | |
| 3505 | def test_sum(self): |
| 3506 | """Ensure that field can be summed over correctly.""" |