Ho un progetto Django per la gestione di un elenco di articoli di riviste. Il modello principale è Article
. Questo ha vari campi per archiviare cose come titolo dell'articolo, data di pubblicazione, argomento, oltre all'elenco delle società menzionate nell'articolo. (company
è il proprio modello).Modelli Django - Stampa di ManyToManyField, separati da virgola, l'elenco dei risultati di ordinamento in dict?
Voglio un modello che stampa un elenco degli articoli, ordinati per categoria, e anche l'elenco delle aziende menzionati.
Tuttavia, sto colpendo due problemi.
In primo luogo, il campo company
è un campo ManyToMany. Sto stampando questo con successo ora, usando il all
iterabile, grazie a questa domanda SO =). (Curioso però, dove è questo all
iterabile documentato nella documentazione di Django?)
listing objects from ManyToManyField
Tuttavia, mi piacerebbe per la stampa "" (virgola seguita da uno spazio) dopo ogni elemento, ad eccezione la ultimo elemento. Così l'output sarà:
Joe Bob Company, Sarah Jane Company, Tool Company
e non:
Joe Bob Company, Sarah Jane Company, Tool Company,
Come si fa a raggiungere questo con sistema di template di Django?
In secondo luogo, ogni Article
ha un CharField, chiamato category
, che memorizza la categoria dell'articolo. Vorrei gli articoli ordinati per categorie, se possibile. Quindi uso QuerySet e ottengo una bella lista di articoli rilevanti in article_list. Quindi utilizzo il tag modello regroup
per ordinare questo in categorie e stamparne uno.
{ 'tennis': ('article_4', 'article_5')
'cricket': ('article_2', 'article_3')
'ping pong': ('article_1')
}
Tuttavia, ho bisogno di fare in modo che la mia lista di input è ordinato, prima di passarlo a regroup
. La mia domanda è, è meglio utilizzare il modello dictsort
-tag per ordinare questo all'interno del template, o dovrei usare order_by
chiamata di QuerySet invece?
e presumo che sia meglio usare regroup
, piuttosto che cercare di codificare questo io stesso in Python all'interno della vista?
Cheers, Victor
Hai svalutato =). Tuttavia, ero curioso: questo metodo è superiore in qualsiasi modo al templatetag "join" nell'altra soluzione? – victorhooi
Penso che siano per due diversi usi. Se hai solo una stringa o un array int, usa join. Se hai un oggetto che devi scorrere, devi usare questo metodo. – killerbarney
Utile anche quando vuoi fare qualcosa del tipo: '{% per azienda in article.companys.all%} {{company.name}} {% se non forloop.last%}, {% endif%} {% endfor%} ' –
datakid