django-unjoinify.Um ajudante para recuperar eficientemente conjuntos de dados profundamente aninhados | |
Baixe Agora |
django-unjoinify. Classificação e resumo
Propaganda
- Licença:
- BSD License
- Nome do editor:
- Matt Westcott
- Site do editor:
- https://github.com/gasman/
django-unjoinify. Tag
django-unjoinify. Descrição
Um ajudante para recuperar eficientemente conjuntos de dados profundamente aninhados Django-UnJoinify é um aplicativo Django para recuperar eficientemente conjuntos de dados profundamente aninhados (para pessoas que não têm medo de um pouco de SQL). Os problemasupõem que você tem um site sobre festivais de cinema. Cada festival tem muitos prêmios, e cada prêmio tem muitas indicações. Uma nomeação pertence a um filme, e um filme pode ter vários diretores (em uma relação muitos-para-muitos). Você quer ter uma página listando a lista completa de filmes nomeados em um festival, incluindo seus diretores. Se você fizer isso a maneira ingênua (looping sobre prêmios, então indicações / filmes, depois diretores), você acabará fazendo lotes e Muitas pequenas dúvidas. Este isbad.select_Related não irá ajudá-lo aqui - não pode seguir as relações de uma e muitas e muitas e muitas. (Veja os bilhetes django # 2238 e # 6432.) A resposta tradicional é morder a bala e descer para o SQL bruto neste ponto: selecione tinseltown_award.id, tinseltown_award.id como nominação__id, tinseltown_nomination.ranking como nomeação__ranking, tinseltown_movie.id AS nomination__movie__id, tinseltown_movie.title AS nomination__movie__title, tinseltown_person.id AS nomination__movie__directors__id, tinseltown_person.first_name AS nomination__movie__directors__first_name tinseltown_person.surname AS nomination__movie__directors__surnameFROM tinseltown_award LEFT JOIN tinseltown_nomination EM (tinseltown_award.id = tinseltown_nomination.award_id) LEFT JOIN tinseltown_movie EM (tinseltown_nomination.movie_id = Tinseltown_movie.id) Left Juntar tinseltown_movie_directors on (tinseltown_movie.id = tinseltown_movie_directors.movie_id) Left Iniciar tinseltown_person on (tinseltown_movie_directors.person_id = tinseltown_person.id) onde tinseltown_award.festival_id =? ordem por tinseltown_award.name, tinseltown_nomination.rankingthis captura todos os dados necessários para a página em uma única consulta, mas há uma desvantagem: tudo que você recebe é uma tabela de resultados do SQL simples, sem acesso aos objetos do modelo e seus métodos amorosos (Think get_absolute_url) .unJoinificar para o resgateProvided você usou a notação de sublinhado duplo acima para seus nomes de coluna, e fez com que eles se encontrassem com seus nomes de relações, o UnJoinificy levará sua consulta e, através de alguma introspecção de Orm, reconstruirá um objeto. Árvore: Awards = UnJoinify (Prêmio, "Select Tinseltown_award.id ...", (Festival_id,)) (Aqui, é a classe base que todas as junções estão desligando e festival_id é um parâmetro para a consulta.) Bem. .. quase. Devido a limitações do ORM de Django, não podemos devolver uma árvore de objetos adequada com a capacidade de se referir a denominações e assim por diante. Em vez disso, o que você volta é uma matriz de (prêmio, nominações) tuplas, onde as indicações são em si uma matriz de tuplas (nomeação, diretores, diretores), e os diretores são uma matriz de objetos pessoais. Isso é bom o suficiente para iterar em um modelo, no entanto: {% de adjudicação, as indicações em prêmios%}
{{award.name}} {% para nomeação, filme, diretores em nomeações%}
django-unjoinify. Software Relacionado
django-metaimage
wrapper em torno de django-photogoe lidando com imagens remotas e imagens geradas pelo lado do servidor ...
168
Django-Cte-Trees
Implementação Experimental de árvores para Django usando Expressões de Tabela Comum PostgreSQL (CTE) ...
223