django-desinimarUn ayudante para recuperar de manera eficiente conjuntos de datos profundamente anidados | |
Descargar ahora |
django-desinimar Clasificación y resumen
Anuncio publicitario
- Licencia:
- BSD License
- Nombre del editor:
- Matt Westcott
- Sitio web del editor:
- https://github.com/gasman/
django-desinimar Etiquetas
django-desinimar Descripción
Un ayudante para recuperar de manera eficiente conjuntos de datos profundamente anidados Django-Unjeify es una aplicación de Django para recuperar de manera eficiente los conjuntos de datos profundamente anidados (para que las personas que no tienen miedo de un poco de SQL). Los problemasUponidos, usted tiene un sitio web sobre festivales de cine. Cada festival tiene muchos premios, y cada premio tiene muchas nominaciones. Una nominación pertenece a una película, y una película puede tener varios directores (en una relación de muchos a muchos). Desea tener una página que enumere la lista completa de películas nominadas en un festival, incluidos sus directores. Si lo hace lo ingenuo (bucle de los premios, luego las nominaciones / cine, luego los directores), terminará haciendo lotes y Muchas pequeñas consultas. Esta isbad.select_related no lo ayudará aquí, no puede seguir las relaciones entre sí y enmanjas a muchos. (Ver los boletos de Django # 2238 y # 6432). La respuesta tradicional es morder la bala y bajar a SQL RAW en este punto: seleccione Tinseltwnown_Award.ID, Tinseltwnown_Award.Name, Tinseltwnown_nomination.id como nominación__id, tinseltown_nomination.ranking como nominación. 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 ON (tinseltown_award.id = tinseltown_nomination.award_id) LEFT JOIN tinseltown_movie ON (tinseltown_nomination.movie_id = TINSELTWOWN_MOVIE.ID) ÚNETE TINSELLWN_MOVIE_DIRTORS ON (TINSELTWN_MOVIE.ID = TINSELLWN_MOVIE_DIRECTORS.MOVIE_ID) ÚNETE TINSELLWN_PERSON ON (TINSELTWN_MOVIE_DIRTORS.PERSON_ID = TINSELLWN_PERSON.ID) DONDE TINSELTWOWN_AWARD.FESTIVAL_ID tinseltwown_award.name, tinseltwown_nomination.rankingthis Captura todos los datos que necesita para la página en una sola consulta, pero hay un inconveniente: todo lo que vuelve es una tabla de resultados de SQL simple, sin acceso a sus objetos modelo y sus métodos con amor. (Piense en get_absolute_url) .unjuntary al rescateprendido Ha utilizado la notación de doble guión más arriba para los nombres de su columna y los hizo coincidir con los nombres de las relaciones, no se incorporarán su consulta, y a través de una introspección de ORM astutas, reconstruya un objeto Árbol: Premios = Desinicio (premio ", seleccione TINSELTWN_AWARD.ID ...", (Festival_ID,)) (aquí el premio es la clase base que todas las uniones están colgando, y Festival_ID es un parámetro de la consulta.) Bien. .. casi. Debido a las limitaciones del ORM de Django, no podemos devolver un árbol de objetos adecuado con la capacidad de referirse a los premios. Nominaciones, etc. En su lugar, lo que recibe es una variedad de tuplas (premios, nominaciones), donde las nominaciones son en sí misma una matriz de (nominación, cine, directores) tuplas, y directores es una serie de objetos de persona. Esto es lo suficientemente bueno para la iteración a través de una plantilla, sin embargo: {% para la adjudicación, nominaciones en premios%}
{{award.name}} {% para la nominación, cine, directores de nominaciones%}
django-desinimar Software relacionado
django-metaamage
Envoltura alrededor de Django-Photologue Tratar con imágenes remotas y imágenes generadas por el servidor ...
168
Django-CTE-árboles
Implementación experimental de árboles para Django utilizando expresiones de mesa comunes PostgreSQL (CTE) ...
223