Como filtrar objetos para anotação de contagem no Django?

Considere modelos simples do DjangoEvent eParticipant:

class Event(models.Model):
    title = models.CharField(max_length=100)

class Participant(models.Model):
    event = models.ForeignKey(Event, db_index=True)
    is_paid = models.BooleanField(default=False, db_index=True)

É fácil anotar a consulta de eventos com o número total de participantes:

events = Event.objects.all().annotate(participants=models.Count('participant'))

Como anotar com a contagem de participantes filtrada poris_paid=True?

Eu preciso consultartodos os eventos independentemente do número de participantes, p. Não preciso filtrar por resultado anotado. Se houver0 participantes, tudo bem, eu só preciso0 no valor anotado.

oexemplo da documentação não funciona aqui, porque exclui objetos da consulta em vez de anotá-los com0.

Atualizar. Django 1.8 tem novorecurso de expressões condicionais, então agora podemos fazer assim:

events = Event.objects.all().annotate(paid_participants=models.Sum(
    models.Case(
        models.When(participant__is_paid=True, then=1),
        default=0,
        output_field=models.IntegerField()
    )))

Atualização 2. O Django 2.0 possui novasAgregação condicional recurso, consultea resposta aceita abaixo.

questionAnswers(4)

yourAnswerToTheQuestion