Autonomia & Tecnologia

Agregações condicionais com Django Aggregate If

O django-aggregate-if implementa agregações condicionais no Django.

Agregações condicionais como SumIf e CountIf são famosos nas planilhas. Na sua aplicação web, elas podem ajudar a reduzir a quantidade de queries para obter informações como estatísticas, por exemplo.

Imagine que você tem um modelo Offer, como este:

Digamos que você queira saber:

  1. Quantas ofertas existem no total;
  2. Quantas ofertas estão OPEN, REVOKED ou PAID;
  3. Quanto dinheiro foi oferecido no total;
  4. Quanto dinheiro está em ofertas OPEN, REVOKED e PAID;

Para obter estas informações você poderia adicionar SQL direto com o método extra do QuerySet, ou executar as queries:

Neste caso, 8 consultas ao banco foram necessárias para obter as informações desejadas.

Com as agregações condicionais do django-aggregate-if você pode obter tudo com apenas 1 query:

Inspiração

Existe um ticket 11305 que (com sorte) adicionará essa capacidade ao ORM do Django 1.6.

No entanto, refatorando a página de estatísticas do FreedomSponsors.org, decidi implementar o django-aggregate-if para trazer esta funcionalidade para o Django 1.4.

A biblioteca utiliza a mesma API e testes propostos no ticket 11305, então quando a funcionalidade estiver disponível no Django, você poderá facilmente substituir o django-aggregate-if.

O código está no Github e toda contribuição é sempre bem-vinda. 😉

[]’s, HB!

você pode gostar também
Comentários