You are not getting the event instances because you are querying Event.objects with the values method. This will provide you the data for only the specified fields: https://docs.djangoproject.com/en/dev/ref/models/querysets/#values
Performing this kind of group by with the Django ORM is not straightforward. The proposed solution often is:
q = Events.objects.filter(winner=athlete)
q.query.group_by = ['type']
q.count()
But I'd rather do it with straight python. Maybe something like
athlete = Athlete.objects.get(name='dave')
events = Events.objects.filter(winner=athlete)
won_per_type = defaultdict(list)
for e in events:
won_per_type(e.type).append(e)