Tengo un proyecto de Django para administrar una lista de artículos de revistas. El modelo principal es Article
. Esto tiene varios campos para almacenar cosas como el título del artículo, la fecha de publicación, el tema, así como la lista de compañías mencionadas en el artículo. (company
es su propio modelo).Plantillas de Django: ¿imprime Coma-ManyField separado por comas, ordenando la lista de resultados en dict?
Quiero una plantilla que imprima una lista de los artículos, ordenados por categoría, y que también enumere las compañías mencionadas.
Sin embargo, estoy llegando a dos problemas.
En primer lugar, el campo company
es un campo ManyToMany. Estoy imprimiendo esto con éxito ahora, usando el all
iterable, gracias a esta pregunta SO =). (Curioso, sin embargo, ¿dónde está este all
iterables documentado en la documentación de Django?)
listing objects from ManyToManyField
Sin embargo, me gustaría imprimir "" (coma seguida de espacio) después de cada elemento, excepto la último artículo. Por lo que la salida sería:
Joe Bob Company, Sarah Jane Company, Tool Company
y no:
Joe Bob Company, Sarah Jane Company, Tool Company,
¿Cómo se logra esto con sistema de plantillas de Django?
En segundo lugar, cada Article
tiene un CharField, llamado category
, que almacena la categoría para el artículo. Me gustaría los artículos ordenados por Categorías, si es posible. Así que uso QuerySet y obtengo una buena lista de artículos relevantes en article_list. Luego uso la etiqueta de plantilla regroup
para ordenar esto en categorías e imprimir cada una.
{ 'tennis': ('article_4', 'article_5')
'cricket': ('article_2', 'article_3')
'ping pong': ('article_1')
}
Sin embargo, tengo que asegurarme de que mi lista de entrada está ordenada, antes de pasar a regroup
. Mi pregunta es, ¿es mejor utilizar la etiqueta de plantilla dictsort
para ordenar esto dentro de la plantilla, o debo usar la llamada order_by
de QuerySet en su lugar?
Y supongo que es mejor usar regroup
, en lugar de intentar codificarlo yo mismo en Python dentro de la vista?
Saludos, Victor
Te votamos a la última vez =). Sin embargo, tenía curiosidad: ¿es este método superior de alguna manera al template de "join" en la otra solución? – victorhooi
Creo que son para dos usos diferentes. Si solo tiene una cadena o una matriz int, entonces use join. Si tiene un objeto por el que debe iterar, debe usar este método. – killerbarney
También es útil cuando quiere hacer algo como: '{% para la compañía en article.companys.all%} {{company.name}} {% if not forloop.last%}, {% endif%} {% endfor%} ' –
datakid