All work and no play makes Jack a dull boy

quarta-feira, 5 de novembro de 2014

juntar querysets

Como combinar ou como mesclar querysets (2 ou mais) em apenas um elemento?
from itertools import chain
lista_final = list(chain(primeira_queryset, segunda_queryset))
Usar o método chain do itertools é mais rápido do que fazer um loop em cada um e apendar em outra lista. Por que ele é mais rápido? Como quase tudo em python, se há um método que faz mais rápido, muito provavelmente é por ter sido implementado em C. Não é diferente aqui, é mais rápido por ser implementado em C.

Agora, caso você queira que a lista final tenha um ordem comum às querysets, você pode trabalhar com uma lambda dentro de um sorted() combinada ao chain().
lista_final = sorted(
    chain(primeira_queryset, segunda_queryset),
    key=lambda instance: instance.data_criacao)

Se você está com Python 2.4 ou superior, usar attrgetter como alternativa ao uso de lambda.
from operator import attrgetter
lista_final = sorted(
    chain(primeira_queryset, segunda_queryset),
    key=attrgetter('data_criacao'))

fonte

Nenhum comentário:

Postar um comentário