grupo por no django

votos
3

Como posso criar grupo simples por consulta na versão tronco de Django?

Eu preciso de algo como

SELECT name
FROM mytable
GROUP BY name

realmente o que eu quero fazer é simplesmente obter todas as entradas com nomes distintos.

Publicado 24/01/2009 em 06:15
fonte usuário
Em outras línguas...                            


3 respostas

votos
12

Se você precisar de todos os nomes distintos, basta fazer o seguinte:

Foo.objects.values('name').distinct()

E você terá uma lista de dicionários, cada um com um nome chave. Se você precisar de outros dados, basta adicionar mais nomes de atributos como parâmetros para os .values () chamada. Claro, se você adicionar atributos que podem variar entre linhas com o mesmo nome, você vai quebrar o .distinct ().

Isso não vai ajudar se você deseja obter modelo completo objetos de volta. Mas recebendo nomes distintos e recebendo dados completos são objetivos inerentemente incompatíveis de qualquer maneira; como você sabe que linha com um determinado nome pretende devolvidos em sua totalidade? Se você quiser calcular algum tipo de dados agregados para todas as linhas com um determinado nome, suporte a agregação foi recentemente adicionado ao tronco Django e pode cuidar disso para você.

Respondeu 24/01/2009 em 16:37
fonte usuário

votos
3

Adicionar .distinct ao seu queryset:

Entries.objects.filter(something='xxx').distinct()
Respondeu 24/01/2009 em 08:04
fonte usuário

votos
2

isso não vai funcionar, porque cada linha tem id único. Assim, cada registro é diferente ..

Para resolver o meu problema eu usei

foo = Foo.objects.all()
foo.query.group_by = ['name']

mas isso não é API oficial.

Respondeu 24/01/2009 em 08:09
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more